我从 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
以显示新创建的路线