2

假设我有我的user控制器,其中有action_index(), action_login(),action_logout() action_profile($userid) 方法。我想做一个路由

www.mysite.com/user/xxxx

检查xxxxurl 的一部分,如果它不是 (login,logout,index) 之一,它会调用action_profile(xxxx)方法。

现在我这样做:我的路由将所有www.mysite.com/user/xxxx类型的请求路由到action_index它并检查是否xxxx是方法名称。如果它不是它调用的方法名称action_profile(xxxx)

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

4

2 回答 2

5

嗯,我不确定我是否明白你在问什么。laravel 中的路线是基于第一次匹配的。

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

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

第一行用于路由user/xxxaction_profile()用户控制器中xxx的任何数值。而第二个会将任何其他 URI ( user/***/***) 映射到相应的用户控制器的方法。这意味着它会自动映射user/loginaction_login()user/registertoaction_register()等等。

于 2012-11-18T02:55:14.773 回答
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。这可能对搜索引擎优化不利。

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

于 2012-11-18T11:27:37.780 回答