1. 有一种控制器专门处理 CURD(增删改查),方法很多且方法名基本固定;
2. 对于这种控制器,我们可以将它设置为资源型控制器,不要大量设置路由;
3. 这里推荐直接使用命令行生成资源路由,比如:
BlogController; php artisan make:controller BlogController --resource
4. 生成了的资源控制器会产生 7 个方法,配置好路由后会自动生成相关内容
Route ::resource( 'blogs ', 'BlogController '); //单个资源路由
//批量定义资源路由
Route ::resources([
'blogs ' => 'BlogController '
]);
HTTP 类型 | 路由 URI | 控制器方法 | 路由命名 | 描述 |
GET | blogs | index() | blogs.index | 获得数据列表 |
GET | blogs/create | create() | blogs.create | 创建页面(表单页) |
POST | blogs | store() | blogs.store | 创建页的接受处理 |
GET | blogs/{blog} | show() | blogs.show | 获得一条数据 |
GET | blogs/{blog}/edit | edit() | blogs.edit | 编辑(表单页) |
PUT/PATCH | blogs/{blog} | update() | blogs.update | 从编辑页中接受处理 |
DELETE | blogs/{blog} | destroy() | blogs.destroy | 删除一条数据 |
5. 如果我们注册了资源路由,那么如上图的资源路由 URI 和名称均自动创建生效;
http://localhost:8000/blogs/10/edit //可以访问到 edit 方法
return route( 'blogs.store '); //可以通过助手 route()了解是否注册
6. 还有一条命令可以直接查看目前可用的路由以及命名;
php artisan route:list
7. 我们也可以限制资源路由只开放部分方法或排除部分方法,可以用命令查看;
//只有 index(),show()可访问
Route ::resource( 'blogs ', 'BlogController ')
->only([ 'index ', 'show ']);
//排除 index(),show()的其它方法可访问
Route ::resource( 'blogs ', 'BlogController ')
->except([ 'index ', 'show ']);
8. 资源控制器还有一种不需要 HTML 页面方法的 API 路由,只提供数据接口;
//API 资源,并不需要 HTML 页面(create,edit),会排除
Route ::apiResource( 'blogs ', 'BlogController ');
//批量方式
Route ::apiResources([
'blogs ' => 'BlogController '
]);
9. 当然,也支持一开始就生成一个不包含 HTML 页面方法的资源控制器;
10. 要注意的是,对应的资源路由,直接使用 api 资源路由即可;
php artisan make:controller CommentController --api
Route ::apiResource( 'comments ', 'CommentController ');