You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选Laravel中指向视图的GET路由URI?

如何筛选Laravel中关联视图的GET路由?

我需要给URI命名以便在分析面板展示(每个关联视图的URI都有实际名称,还要做多语言翻译)。目前我已经通过以下步骤提取所有GET路由的URI:

  1. 执行命令导出GET路由为JSON文件:
    php artisan route:list --method=GET --json
    
  2. 通过PHP代码读取并提取URI:
    $uris_json = file_get_contents("/path/to/routes/file");
    $uris_array = json_decode($uris_json, true);
    $uris = array_column($uris_array, 'uri');
    

现在我能查看所有GET URI并手动命名,但部分GET路由并不关联视图,需要逐一排查,请问有没有方法可以直接筛选出最终指向视图的GET路由?


方法1:利用路由JSON的action字段筛选

Laravel导出的路由JSON中,action字段会存储路由对应的闭包或控制器方法信息,可通过分析该字段快速定位关联视图的路由:

筛选闭包型视图路由

如果路由是直接通过闭包返回视图(比如Route::get('/', fn() => view('home'))),直接过滤action包含view(的条目即可:

$uris_json = file_get_contents("/path/to/routes/file");
$uris_array = json_decode($uris_json, true);

$view_routes = array_filter($uris_array, function($route) {
    return str_contains($route['action'], 'view(');
});

$view_uris = array_column($view_routes, 'uri');

筛选控制器型视图路由

对于指向控制器方法的路由,需要扫描控制器文件,判断方法内是否调用了view():

$controller_routes = array_filter($uris_array, function($route) {
    return str_contains($route['action'], '@');
});

$view_uris = [];
foreach ($controller_routes as $route) {
    list($controller, $method) = explode('@', $route['action']);
    $controller_path = app_path("Http/Controllers/{$controller}.php");
    if (!file_exists($controller_path)) continue;
    
    $content = file_get_contents($controller_path);
    // 匹配方法内是否存在view()调用
    if (preg_match("/public function {$method}\(.*\).*view\(/s", $content)) {
        $view_uris[] = $route['uri'];
    }
}

方法2:给视图路由添加自定义标识

在定义路由时,给关联视图的路由添加专属属性,后续可直接通过属性筛选:

// 方式1:利用路由命名(适合已有命名规范的场景)
Route::get('/dashboard', [DashboardController::class, 'index'])->name('web.dashboard');

// 方式2:添加自定义属性
Route::get('/profile', [ProfileController::class, 'show'])->middleware('web')->setOption('has_view', true);

导出路由时可直接过滤:

# 筛选带有web前缀命名的路由
php artisan route:list --method=GET --json --name=web.

方法3:用Artisan命令的--filter参数快速过滤

如果你的控制器有明确的目录区分(比如Web视图控制器放在App\Http\Controllers\Web下,API控制器放在Api下),直接用命令行过滤:

php artisan route:list --method=GET --json --filter=Web\\

内容的提问来源于stack exchange,提问作者pileup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:22:46