资源控制器 RESTful 详细讲解查看laravel8 控制器文档
资源控制器
1、Laravel 的资源控制器可以让我们很便捷地构建基于资源的 RESTful 控制器,例如,你可能想要在应用中创建一个控制器,用于处理关于文章存储的 HTTP 请求,使用 Artisan 命令 make:controller
,我们可以快速创建这样的控制器:
php artisan make:controller PostController --resource
2、接下来,可以通过 resource
方法为该控制器注册一个资源路由:
Route::resource('posts', \App\Http\Controllers\PostController::class);
3、这个路由声明包含了处理文章资源对应动作的多个路由,相应地,Artisan 生成的控制器也已经为这些动作设置了对应的处理方法。
你可以通过传递数组到 resources
方法从而一次注册多个资源控制器:
Route::resources([
'photos' => PhotoController::class,
'posts' => PostController::class,
]);
资源控制器处理的动作
请求方式 | URI路径 | 控制器方法 | 路由名称 |
---|---|---|---|
GET | /posts |
index | posts.index |
GET | /posts/create |
create | posts.create |
POST | /posts |
store | posts.store |
GET | /posts/{post} |
show | posts.show |
GET | /posts/{post}/edit |
edit | posts.edit |
PUT/PATCH | /posts/{post} |
update | posts.update |
DELETE | /posts/{post} |
destroy | posts.destroy |
4、指定资源模型
如果你使用了路由模型绑定,并且想要在资源控制器的方法中对模型实例进行依赖注入,可以在生成控制器的使用使用 --model
选项:
php artisan make:controller PostController --resource --model=Post
可以看到,如果 Post
类不存在的话会询问并自动创建,同时 PostController
类中的方法参数也变成了模型实例
5、API 资源路由
声明被 API 消费的资源路由时,你可能需要排除展示 HTML 模板的路由,如 create
和 edit
,为了方便起见,Laravel 提供了 apiResource
方法自动排除这两个路由:
Route::apiResource('posts', PostController::class);
同样,你可以传递数组到 apiResources
方法以便一次注册多个 API 资源控制器:
Route::apiResources([
'photos' => PhotoController::class,
'posts' => PostController::class,
]);
6、
要想快速生成不包含 create
或 edit
方法的 API 资源控制器,可以在执行 make:controller
命令时使用 --api
开关: