Laravel-4:Laravel中RESTful控制器和资源控制器之间的区别

Asf*_*mim 9 laravel laravel-4

有人可以解释一下Laravel中RESTful控制器和资源控制器之间的区别吗?我也有一些问题 -

什么时候我应该使用RESTful控制器和资源控制器?

  • RESTful控制器和资源控制器是否有任何Controller操作的命名约定?

  • 如果我使用RESTful控制器,我如何为控制器定义路由?

  • 对于构建控制器方法最好的API?

maj*_*rif 15

Laravel资源控制器定义为Route::controller('users', 'UserController');Restful Controllers定义为Route::resource('photo', 'PhotoController');.

一个宁静的控制器遵循标准蓝图,以获得一个宁静的资源,主要包括:

GET         /resource                    index         resource.index
GET         /resource/create             create        resource.create
POST        /resource                    store         resource.store
GET         /resource/{resource}         show          resource.show
GET         /resource/{resource}/edit    edit          resource.edit
PUT/PATCH   /resource/{resource}         update        resource.update
DELETE      /resource/{resource}         destroy       resource.destroy
Run Code Online (Sandbox Code Playgroud)

虽然资源控制器不像宁静的控制器那样自以为是.它允许您直接从您的控制器创建方法,它们都会自动映射到您的路由:

public function getIndex()
{
    // Route::get('/', 'Controller@getIndex');
}

public function postProfile()
{
    // Route::post('/profile', 'Controller@postProfile');
}
Run Code Online (Sandbox Code Playgroud)

将自动拥有路由,Route::post('/profile', 'Controller@postProfile');而不是在路由上明确定义它,更多的是帮助,如果你要避免很长的路由文件.

php artisan routes会告诉你所有的路线.您可以测试输出并使用该命令查看自动生成的路由.


And*_*ión 5

它们是不同的概念。在 laravel 中,资源控制器为给定的命名资源定义了所有默认路由,以遵循REST 原则

因此,当您在 routes.php 中定义资源时,例如:

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

Laravel 唯一要做的就是为你定义这个路由:

Verb      Path                          Action  Route Name
GET       /resource                     index   resource.index
GET       /resource/create              create  resource.create
POST      /resource                     store   resource.store
GET       /resource/{resource}          show    resource.show
GET       /resource/{resource}/edit     edit    resource.edit
PUT/PATCH /resource/{resource}          update  resource.update
DELETE    /resource/{resource}          destroy resource.destroy
Run Code Online (Sandbox Code Playgroud)

并期望您在控制器上定义这些方法。您还可以使用 only/except 子句来删除不需要的路由:

Route::resource('user', 'UserController', ['except' => ['destroy']]);
Run Code Online (Sandbox Code Playgroud)

有关Laravel 文档的更多信息