单个Route :: get()中的多个路由调用Laravel 4

And*_*gan 13 php laravel laravel-4

在Laravel 4中定义路由时,是否可以在同一路径中定义多个URI路径?

目前我做以下事情:

Route::get('/', 'DashboardController@index');
Route::get('/dashboard', array('as' => 'dashboard', 'uses' => 'v1\DashboardController@index'));
Run Code Online (Sandbox Code Playgroud)

但这违背了我的目的,我想做点什么

Route::get('/, /dashboard', array('as' => 'dashboard', 'uses' => 'DashboardController@index'));
Run Code Online (Sandbox Code Playgroud)

小智 23

我相信你需要使用带有正则表达式的可选参数:

Route::get('/{name}', array(
     'as' => 'dashboard', 
     'uses' => 'DashboardController@index')
    )->where('name', '(dashboard)?');
Run Code Online (Sandbox Code Playgroud)

*假设您想要路由到同一个控制器,这个问题并不完全清楚.

*当前接受的答案不仅仅与/OR 匹配/dashboard.

  • 2年后,这个问题仍然具有现实意义.但是有可能用两条以上的路线来处理这个案子吗?例如:与'/','/ dashboard'和'/ home'相同的控制器?我们可以进一步将可选参数限制为"home"以及"dashboard"吗? (5认同)

Olu*_*kin 14

我发现好奇的缘故试图解决@Alex 发布的这个问题作为@graemec回答的帖子,以发布一个有效的解决方案:

Route::get('/{name}', [
    'as' => 'dashboard', 
    'uses' => 'DashboardController@index'
  ]
)->where('name', 'home|dashboard|'); //add as many as possible separated by |
Run Code Online (Sandbox Code Playgroud)

因为第二个参数where()需要正则表达式,所以我们可以将它分配给完全匹配的任何一个,|所以我最初的想法是提出一个whereIn()进入Laravel路由的解决方案.

PS:这个例子是在Laravel 5.4.30上测试的

希望有人发现它有用


Mar*_*ann 5

如果我理解你的问题我会说:

使用路由前缀http://laravel.com/docs/routing#route-prefixing

或者(可选)路由参数http://laravel.com/docs/routing#route-parameters

例如:

Route::group(array('prefix' => '/'), function() { Route::get('dashboard', 'DashboardController@index'); });
Run Code Online (Sandbox Code Playgroud)

或者

Route::get('/{dashboard?}', array('as' => 'dashboard', 'uses' => 'DashboardController@index'));
Run Code Online (Sandbox Code Playgroud)

  • 第二个例子将匹配任何 uri,例如 `/foo` 这个答案是错误的 (14认同)