Laravel中的条件路由

时间:2012-11-18 02:10:14

标签: php laravel

假设我有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)

但是,我认为有可能以更好的方式。我怎样才能做得更好?

2 个答案:

答案 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。这可能对搜索引擎优化不利。

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