2013-07-05 74 views
9

在Laravel 4中定义路由时,是否可以在同一路由中定义多个URI路径?单一路由中的多个路由:: get()调用Laravel 4

目前我做到以下几点:

Route::get('/', '[email protected]'); 
Route::get('/dashboard', array('as' => 'dashboard', 'uses' => 'v1\[email protected]')); 

但这违背了我的目的,我想不喜欢

Route::get('/, /dashboard', array('as' => 'dashboard', 'uses' => '[email protected]')); 
+5

就个人而言,我更愿意重定向'/''到/ dashboard'(或副-versa)为SEO和简单的目的,为什么有两个网站显示完全相同的内容? –

+0

@Alexandre Danault在某些情况下,您希望基于路线(稍微)改变视图的内容,但同时还需要使用单个控制器来处理请求(即不要在3个不同的区域重复整个逻辑控制器方法)。 – Alex

回答

2

的东西,如果我理解你的问题对的,我会说:

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

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

因此,例如:

Route::group(array('prefix' => '/'), function() { Route::get('dashboard', '[email protected]'); }); 

OR

Route::get('/{dashboard?}', array('as' => 'dashboard', 'uses' => '[email protected]')); 
+11

第二个例子将匹配任何uri,例如'/ foo'这个回答是错误的 – Moak

20

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

Route::get('/{name}', array(
    'as' => 'dashboard', 
    'uses' => '[email protected]') 
    )->where('name', '(dashboard)?'); 

*假设你想要路由到相同的控制器,这是不完全清楚的问题。

*当前接受的答案与一切不仅仅匹配//dashboard

+3

2年后,这个问题还是相关的。然而,是否有可能处理超过两条路线的情况?例如:与'/','/ dashboard'和'/ home'相同的控制器?我们是否可以将可选参数进一步限制为“家”以及“仪表板”? – Alex

+0

@Alex问题是相关的。目前为止有解决方案吗? –

3

我觉得很有意思出于好奇的缘故,试图解决这个问题,通过@Alex张贴在@graemec评论张贴一个可行的解决方案:

Route::get('/{name}', [ 
    'as' => 'dashboard', 
    'uses' => '[email protected]' 
    ] 
)->where('name', 'home|dashboard|'); //add as many as possible separated by | 

由于where()第二个参数预期的正则表达式所以我们可以指定它匹配刚好任何由|分开的那些,所以我认为可能有whereIn()由此解决。

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

希望有人发现了它有用