Laravel 简单入门,控制器的使用(二)

一、创建控制器

MVC 模式中 C 代表控制器,用于接收 HTTP 请求,从而进行逻辑处理。有两种方式可以创建控制器,IDE 直接创建,或使用命令生成一个:

php artisan make:controller TaskController
通过设置路由来访问创建好的控制器,参数二:控制器@方法名
Route::get('task', 'TaskController@index'); 
Route::get('task/read/{id}', 'TaskController@read');

 

 

、资源控制器

1、Laravel 的资源路由通过单行代码即可将典型的「CURD (增删改查)」路由分配给控制器。

对于这种控制器,我们可以将它设置为资源型控制器,不要大量设置路由;比如BlogController;

php artisan make:controller BlogController --resource
生成了的资源控制器会产生 7 个方法,配置好路由后会自动生成相关内容

2、你可以通过将数组传参到 resources 方法中的方式来一次性的创建多个资源控制器:

//单个资源路由
Route::resource('blogs', 'BlogController');

//批量定义资源路由
Route::resources([
    'blog' => BlogController::class,
    'posts' => BlogController::class,
]);

3、资源控制器操作处理

从上图可知,如果我们直接访问edit,就会报404:

http://la8.com/blogs/edit/10

//正确的访问方式:
http://la8.com/blogs/10/edit

使用router助手函数也一样,它规定了参数名称必须blog

echo route('blogs.edit',['blog'=>10]);
如果你不知道规则,还有一条命令可以直接查看目前可用的路由以及命名;
php artisan route:list

4、部分资源路由

我们也可以限制资源路由只开放部分方法或排除部分方法,可以用命令查看;
//方法一:只有 index(),show()可访问
Route::resource('blogs', 'BlogController')
    ->only(['index', 'show']);

//方法二:排除 index(),show()的其它方法可访问
Route::resource('blogs', 'BlogController')
    ->except(['index', 'show']);

5、API路由

资源控制器还有一种不需要 HTML 页面方法的 API 路由,只提供数据接口;
//API 资源,并不需要 HTML 页面(create,edit),会排除 
Route::apiResource('blogs', 'BlogController');

//批量方式
Route::apiResources([ 'blogs' => 'BlogController' ]);
当然,也支持一开始就生成一个不包含 HTML 页面方法的资源控制器;要注意的是,对应的资源路由,直接使用 api 资源路由即可;
php artisan make:controller CommentController --api 
Route::apiResource('comments', 'CommentController');

 

 

三、嵌套资源

有时可能需要定义一个嵌套的资源型路由。例如,博客可能被添加了多个评论。

//嵌套资源路由
Route::resource('blogs.comments', 'CommentController');

 我们访问edit,需要同时博客ID和评论ID:

http://la8.com/blogs/10/comments/20/edit
而实际上,每个 id 都是独立唯一的,并不需要父 id 和子 id 同时存在
//浅层嵌套 
Route::resource('blogs.comments', 'CommentController')->shallow();//现在只有评论ID就可以

 

 

 
 
 
posted @ 2021-01-31 12:35  不睡  阅读(324)  评论(0编辑  收藏  举报