假设我有user
控制器,其中包含action_index()
,action_login()
,action_logout()
action_profile($userid)
个方法。我想做一个路由
www.mysite.com/user/xxxx
检查网址的xxxx
部分,如果它不是(登录,注销,索引),则调用action_profile(xxxx)
方法。
现在我这样做:
我的路由将所有www.mysite.com/user/xxxx
类型的请求路由到action_index
,并检查xxxx
是否为方法名称。如果它不是方法名称,则调用action_profile(xxxx)
但是,我认为有可能以更好的方式。我怎样才能做得更好?
答案 0 :(得分:5)
嗯,我不确定我是否明白你在问什么。 laravel中的路线是第一场比赛。
因此,您只需将以下内容添加到routes.php
:
Route::get('user/(:num)', 'user@profile');
Route::controller('user');
第一行是在用户控制器中将user/xxx
路由到action_profile()
,其中xxx
是任何数值。而第二个将任何其他URI(user/***/***
)映射到相应的用户控制器的方法。这意味着它会自动将user/login
映射到action_login()
,将user/register
映射到action_register()
,依此类推。
答案 1 :(得分:3)
我建议您在此实例中避免使用Route::controller()
。虽然在某些情况下使用它可以很好,但对于你所追求的东西,最好映射到路线。
你可以这样做。
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
。这可能对搜索引擎优化不利。
映射到您的操作可为您提供额外的灵活性和控制力。