ThinkPHP 根据路由文件获取路由列表
定义一个路由变量
比如我们要获取admin的路由
$routeFile = "admin.php";
清除路由
调用 Route::clear()
方法,清除当前已定义的所有路由。
Route::clear();
设置路由懒加载
调用 Route::lazy(false)
方法,禁用路由的懒加载功能,选择立即加载。
Route::lazy(false);
路由文件路径
$path = root_path() . 'route' . DIRECTORY_SEPARATOR;
引入路由文件
使用 include
语句包含指定的路由文件,执行其中的路由定义。
include $path . $routeFile;
获取路由规则列表
调用 Route::getRuleList()
方法,获取当前定义的所有路由规则列表。
$rules = Route::getRuleList();
过滤闭包路由(可选)
使用 array_filter
函数过滤掉路由规则中 route
为闭包(Closure
)的项,返回非闭包的路由规则数组。
$list = array_filter($rules, function ($rule) {return !($rule['route'] instanceof \Closure);
});
dump($list);
封装函数
function getRotes($routeFile,$dir = null){if (str_contains($routeFile, '.php')) { //检查文件是否php文件Route::clear();Route::lazy(false);$path = root_path() . ($dir ? 'app' . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR : '') . 'route' . DIRECTORY_SEPARATOR;include $path . $routeFile;$rules = Route::getRuleList();return array_filter($rules, function ($rule){ //可选,过滤掉闭包路由return !($rule['route'] instanceof \Closure); //也可以设置其它过滤条件// || str_contains($rule['route'], 'admin') //比如判断路由是否包含'admin'// || str_starts_with($rule['route'], 'admin'); //或者判断是否是admin开头 });}return [];}$list=getRotes('admin.php');dump($list);