Php Laravel中的条件路由

Php Laravel中的条件路由,php,laravel,Php,Laravel,假设我有我的user控制器,其中有action\u index(),action\u login(),action\u logout()action\u profile($userid)方法。我想做一个路由选择 www.mysite.com/user/xxxx 检查url的xxxx部分,如果它不是(登录、注销、索引)之一,则调用action\u profile(xxxx)方法 现在我是这样做的: 我的路由将所有www.mysite.com/user/xxxx类型的请求路由到action\u i

假设我有我的
user
控制器,其中有
action\u index()
action\u login()
action\u logout()
action\u profile($userid)方法。我想做一个路由选择

www.mysite.com/user/xxxx
检查url的
xxxx
部分,如果它不是(登录、注销、索引)之一,则调用
action\u profile(xxxx)
方法

现在我是这样做的: 我的路由将所有
www.mysite.com/user/xxxx
类型的请求路由到
action\u index
,并检查
xxxx
是否为方法名。如果它不是一个方法名,它将调用
action\u profile(xxxx)


然而,我认为这是一个更好的方式。我怎样才能做得更好?

嗯,我不确定我是否理解你的要求。在拉雷维尔的路线是在第一场比赛的基础上

因此,您可以将以下内容添加到
routes.php

Route::get('user/(:num)', 'user@profile');
Route::controller('user');

第一行用于将
user/xxx
路由到用户控制器中的
action\u profile()
,其中
xxx
是任何数值。而第二个将把任何其他URI(
user/***/***
)映射到相应的用户控制器的方法。这意味着它会自动将
user/login
映射到
action\u login()。虽然在某些情况下可以使用它,但对于您想要的内容,最好将其映射到路线

你可以这样做

Route::get('user', 'user@index');
Route::get('user/(:num)', 'user@profile');
Route::get('user/(:any)', 'user@(:1)');
或者你可以对你的最后一条路线更严格一点

Route::get('user/(login|logout)', 'user@(:1)');
我建议您避免使用
Route::controller()
,原因是它确实会为某些内容创建重复项。例如,
yoursite.com/user
将在
yoursite.com/user/index
上复制。这可能不利于搜索引擎优化


映射到您的操作可以为您提供额外的灵活性和控制。

您的代码是正确的。编辑以添加有关Route::controller()的功能的说明。希望它能很快被批准。这里唯一的问题是它也会打开
user/profile/{id}
,这将是
user/{id}
的副本。有些人宁愿避免这样做,因为这对搜索引擎优化不利。@JasonLewis你是对的。我认为用户/*的东西无论如何都不应该被搜索引擎优化识别,所以这对我来说不是问题。