Laravel - Route :: resource vs Route :: controller

Son*_*que 122 laravel laravel-4 laravel-5

我阅读文档的Laravel网站,堆栈溢出,并且谷歌,但还是不明白之间的差别Route::resourceRoute::controller.

其中一个答案说Route :: resource是为了crud.但是,使用Route :: controller,我们可以完成与Route :: resource相同的操作,我们只能指定所需的操作.

他们看起来像兄弟姐妹:

Route::controller('post','PostController');
Route::resource('post','PostController');
Run Code Online (Sandbox Code Playgroud)

我们如何选择使用什么?什么是好习惯?

rya*_*ter 246

RESTful资源控制器

一个RESTful的资源控制器为您设置,甚至名称他们一些缺省路由.

Route::resource('users', 'UsersController');
Run Code Online (Sandbox Code Playgroud)

给你这些命名的路线:

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|PATCH     /users/{user}               update  users.update
DELETE        /users/{user}               destroy users.destroy
Run Code Online (Sandbox Code Playgroud)

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

class UsersController extends BaseController {

    public function index() {}

    public function show($id) {}

    public function store() {}

}
Run Code Online (Sandbox Code Playgroud)

您还可以选择包含或排除的操作,如下所示:

Route::resource('users', 'UsersController', [
    'only' => ['index', 'show']
]);

Route::resource('monkeys', 'MonkeysController', [
    'except' => ['edit', 'create']
]);
Run Code Online (Sandbox Code Playgroud)

RESTful资源控制器文档


隐式控制器

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

Route::controller('users', 'UserController');
Run Code Online (Sandbox Code Playgroud)

会引导您使用某种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'
    }

}
Run Code Online (Sandbox Code Playgroud)

隐式控制器文档


根据您的喜好,最好使用您需要的东西.我个人不喜欢隐式控制器,因为它们可能很乱,不提供名称,使用时会让人感到困惑php artisan routes.我通常将RESTful资源控制器与显式路由结合使用.

  • @Anthony - `resource.edit` 是显示一个编辑视图,基本上是编辑现有资源的表单。 (2认同)
  • @Anthony一般来说,(据我所知)是的.`resource.edit`和`resource.create`通常用于UI ...用HTML表单呈现视图.这些表单将分别PUT/POST到`resource.update`和`resource.store`.如果你不这样做,那么你可以忽略它们并摆脱控制器中的edit()和create()方法. (2认同)