Laravel – 路线::资源vs路线::控制器

我阅读了Laravel网站上的文档,Stack Overflow和Google,但仍不明白Route::resourceRoute::controller之间的区别。

其中一个回答说路线::资源是crud。 但是,通过Route :: controller,我们可以完成与Route :: resource相同的事情,我们只能指定所需的操作。

他们看起来像兄弟姐妹:

 Route::controller('post','PostController'); Route::resource('post','PostController'); 

我们如何select使用什么? 什么是好的做法?

RESTful资源控制器

RESTful资源控制器为您设置一些默认路由,甚至命名它们。

 Route::resource('users', 'UsersController'); 

给你这些命名路线:

 Verb Path Action Route Name GET /users index users.index GET /users/create create users.create POST /users store users.store GET /users/{user} show users.show GET /users/{user}/edit edit users.edit PUT /users/{user} update users.update DELETE /users/{user} destroy users.destroy 

你会设置你的控制器像这样(动作=方法)

 class UsersController extends BaseController { public function index() {} public function show($id) {} public function store() {} } 

您也可以select包含或排除的操作:

 Route::resource('users', 'UsersController', [ 'only' => ['index', 'show'] ]); Route::resource('monkeys', 'MonkeysController', [ 'except' => ['edit', 'create'] ]); 

RESTful资源控制器文档

隐式控制器

隐式控制器更加灵活。 您可以根据HTTP请求types和名称路由到您的控制器方法。 但是,您没有为您定义的路由名称,它将捕获相同路由的所有子文件夹。

 Route::controller('users', 'UserController'); 

会导致你用一种RESTful命名机制来设置控制器:

 class UserController extends BaseController { public function getIndex() { // GET request to index } public function getShow($id) { // get request to 'users/show/{id}' } public function postStore() { // POST request to 'users/store' } } 

隐式控制器文档

根据您的喜好,使用您所需要的是一个很好的做法。 我个人不喜欢隐式控制器 ,因为它们可能是混乱的,不提供名称,并可以混淆使用php artisan routes 。 我通常使用RESTful资源控制器结合显式路由。

对于路线控制器方法,我们只需要定义一条路线。 在get或post方法中,我们必须分别定义路由。

资源方法用于创build多个路由来处理各种Restful操作。

这里是关于这个的Laravel 文档 。