ThinkPHP 根据路由文件获取路由列表

发布于:2025-05-22 ⋅ 阅读:(22) ⋅ 点赞:(0)

定义一个路由变量

比如我们要获取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);


网站公告

今日签到

点亮在社区的每一天
去签到