【发布时间】:2013-02-20 06:50:54
【问题描述】:
我从 CodeIgniter 来到 Laravel。
那么,使用自动路由到所有控制器是一个坏主意吗?
Route::controller(Controller::detect());
我应该使用它来代替在 routes.php 中创建路由吗?
【问题讨论】:
我从 CodeIgniter 来到 Laravel。
那么,使用自动路由到所有控制器是一个坏主意吗?
Route::controller(Controller::detect());
我应该使用它来代替在 routes.php 中创建路由吗?
【问题讨论】:
是的,这很糟糕。
Controller::detect() 实际上在 Laravel 4 中不存在,因为它有点坏了。
detect() 将通过您的文件系统并返回控制器文件,但这是一个坏主意,因为您定义路由的顺序很重要。如果你有任何嵌套的控制器,你会发现这很容易被破坏。
detect() 还会根据文件系统以不同的顺序返回文件,因此这会导致很多不可预测性。
我认为您应该以任何方式定义所有路由,这样更容易阅读和调试。
【讨论】:
关于 Laravel,CI 没有的一个有趣的事情是,对于某些页面,您可以直接路由到视图,而根本不需要控制器。想想像“关于我们”这样的静态页面。 CodeIgniter 需要您为此设置一个控制器 + 视图,即使控制器几乎不会做任何事情。在 Laravel 的情况下,您可以在这种情况下直接路由到视图。
手动设置路线将允许您设置这些短路路线。
【讨论】:
自动检测是个坏主意。
您可以使用路由或使用 Route::controller('mycontroller') 或控制器数组,例如 Route::controller(array('mycontroller', mycontroller2');
那么您将获得好处,而无需自动检测。
【讨论】:
在 laravel 4 中:
你可以像文档http://laravel.com/docs/controllers#restful-controllers一样使用Restful Controller
但是
Route::controller() 必须以两个参数为最低要求
第一个参数代表URL响应,第二个参数是控制器名称
还有
您可以将第三个参数写入Route::controller() 是一个包含动作名称的数组(带有 HTTP 动词的动作名称)和此动作的路由名称
例如:
Route::controller('users','UsersController',array(
'getUsers' =>"listUsers" ,
));
getUsers 操作的路由名称是 listUsers
【讨论】:
以下是 CRUD 和通用路由的一个很好的示例
输入php arisan controller:make SampleController
编辑routes.php并添加
Route::resource('sample', 'SampleController');
然后输入
php artisan routes 显示新创建的路线
【讨论】: