Laravel资源控制器处理的动作

来源:互联网 发布:中国股市周期 知乎 编辑:程序博客网 时间:2024/05/20 14:26
   D:\hwamp\Apache24\htdocs\laravel\my_laravel>php artisan route:list
+--------+---------------------------------------------------------------------------------------------------------------------------------
| Method             | URI    路由          | Name        | Action                      | Middleware      |
+--------+---------------------------------------------------------------------------------------------------------------------------------

|GET|HEAD        | /                           |                    | Closure                              | web                       |

----------------------------------------------------------------------------------------------------------------------------------------------

|GET|HEAD        | admin/category  | category.index     | App\Http\Controllers\Admin\CategoryController@index   | web,admin.login |  显示列表
|POST                 | admin/category  | category.store     | App\Http\Controllers\Admin\CategoryController@store    | web,admin.login |  添加-接收数据提交
|GET|HEAD        | admin/category/create  | category.create   | App\Http\Controllers\Admin\CategoryController@create  | web,admin.login |  添加页面的显示
| DELETE          | admin/category/{category}  | category.destroy  | App\Http\Controllers\Admin\CategoryController@destroy  | web,admin.login |  删除(删除单个)
|GET|HEAD        | admin/category/{category} | category.show   | App\Http\Controllers\Admin\CategoryController@show   | web,admin.login |  显示单个信息
|  PUT |PATCH   | admin/category/{category}  | category.update   | App\Http\Controllers\Admin\CategoryController@update | web,admin.login |  接收并更新数据
|GET|HEAD        | admin/category/{category}/edit  | category.edit      | App\Http\Controllers\Admin\CategoryController@edit      | web,admin.login |  编辑修改



资源控制器

Laravel 的资源控制器使得构建围绕资源的 RESTful 控制器变得毫无痛苦,例如,你可能想要在应用中创建一个控制器,用于处理关于图片存储的 HTTP 请求,使用 Artisan 命令 make:controller,我们可以快速创建这样的控制器:

php artisan make:controller PhotoController --resource

该 Artisan 命令将会生成一个控制器文件 app/Http/Controllers/PhotoController.php,这个控制器包含了每一个资源操作对应的方法。

接下来,可以为该控制器注册一个资源路由:

Route::resource('photos', 'PhotoController');

这个路由声明包含了处理图片资源 RESTful 动作的多个路由,相应地,Artisan 生成的控制器也已经为这些动作设置了对应的处理方法。

资源控制器处理的动作

方法路径动作路由名称GET/photosindexphotos.indexGET/photos/createcreatephotos.createPOST/photosstorephotos.storeGET/photos/{photo}showphotos.showGET/photos/{photo}/editeditphotos.editPUT/PATCH/photos/{photo}updatephotos.updateDELETE/photos/{photo}destroyphotos.destroy

指定资源模型

如果你在使用路由模型绑定并且想要在资源控制器的方法中对模型实例进行类型提示,可以在生成控制器的使用使用 --model 选项:

php artisan make:controller PhotoController --resource --model=Photo

伪造表单方法

由于 HTML 表单不能发起PUTPATCHDELETE请求,需要添加一个隐藏的 _method 字段来伪造 HTTP 请求方式,辅助函数 method_field 可以帮我们做这件事:

{{ method_field('PUT') }}

部分资源路由

声明资源路由时可以指定该路由处理的动作子集:

Route::resource('photo', 'PhotoController', ['only' =>     ['index', 'show']]);Route::resource('photo', 'PhotoController', ['except' =>     ['create', 'store', 'update', 'destroy']]);

命名资源路由

默认情况下,所有资源控制器动作都有一个路由名称,不过,我们可以通过传入 names 数组来覆盖这些默认的名字:

Route::resource('photo', 'PhotoController', ['names' =>     ['create' => 'photo.build']]);

命名资源路由参数

默认情况下, Route::resource 将会基于资源名称的单数格式为资源路由创建路由参数,你可以通过在选项数组中传递 parameters 来覆盖这一默认设置。 parameters 应该是资源名称和参数名称的关联数组:

Route::resource('user', 'AdminUserController', ['parameters' => [    'user' => 'admin_user']]);

上面的示例代码会为资源的 show 路由生成如下 URL:

/user/{admin_user}

补充资源控制器

如果有必要在默认资源路由之外添加额外的路由到资源控制器,应该在调用 Route::resource 之前定义这些路由;否则,通过 resource 方法定义的路由可能无意中优先于补充的额外路由:

Route::get('photos/popular', 'PhotoController@method');Route::resource('photos', 'PhotoController');

注:注意保持控制器的单一职责,如果你发现指向控制器动作的路由超过默认提供的资源控制器动作集合了,考虑将你的控制器分割成多个更小的控制器。

参考资料:http://laravelacademy.org/post/6745.html