具有多个名称的 Laravel 路由

Posted

技术标签:

【中文标题】具有多个名称的 Laravel 路由【英文标题】:Laravel route with multiple names 【发布时间】:2019-03-07 03:49:29 【问题描述】:

我不能在一条路线上有两个名字吗? 如下所示:

Route::get('/', 'Admin\HomeController@index')->name(['admin.home', 'planner.home.index']);

谢谢!

【问题讨论】:

你需要有2条相同的路线,按名称区分 你的意思是:Route::get('xxx')->name('admin.home'); Route::get('xxx')->name('planner.home.index'); 是的,没错。 我试过了,但它显示找不到 admin.home 路由。也许它被覆盖了。 尝试运行php artisan route:list 并确保列出您想要的所有路线 【参考方案1】:

这仅在您需要名称而不是 URL 时才有效,尽管它很棘手且草率。

Route::get('/', 'Admin\HomeController@index')->name('admin.home');
Route::get('/2', function() 
    return redirect()->route('admin.home')
)->name('planner.home.index');

因此,如果您使用route('admin.home')route('planner.home.index'),它会将您重定向到HomeController 中的index 方法。

【讨论】:

有了这个答案,您将拥有两条不同的路线,//2。提出的问题是如何使用两个名称拥有相同的路线。 正如我所说,这有点棘手和草率。但结果是,当你想在你的刀片中使用路由名称时,你使用的每一个,它都会返回一个相同的结果。 即使你最终在同一个位置,结果肯定不一样。【参考方案2】:

如果您希望在同一个应用中拥有 2 个版本(路线名称),您可以这样做。

    <?php

    $routes = ['v1' => 'app.name1.', 'v2' => 'app.name2.'];
    foreach ($routes as $routeVersion => $routeName) 

        // Yours router app (i.e app/v1/pages or app/v2/pages)
        // Your router name (i.e app.name1 or app.name2)
        Route::prefix('app' . $routeVersion)
            ->middleware('auth')
            ->name($routeName)
            ->group(function()

               # Your custom routes
               ... 

            
        
    

    ?>

这是路由列表中的响应示例

希望对你有帮助!

【讨论】:

【参考方案3】:
foreach($pages as  $key => $page)
    Route::any("/".$page, "Controller@index")->name($page);

【讨论】:

以上是关于具有多个名称的 Laravel 路由的主要内容,如果未能解决你的问题,请参考以下文章

多个路由到同一个 Laravel 资源控制器操作

多个控制器的单个 Laravel 路由

Laravel提交表单具有相同的输入名称ajax

【PHP】laravel中获取当前路由名称

没有前缀名称的 Laravel 路由

为每个 URL 路由单独的 Laravel 控制器?