laravel 12 基础控制器
laravel 12 基础控制器

基础控制器

使用命令生成一个基础控制器:

php artisan make:controller UserController

或者直接在app/Http/Controllers目录下手动创建一个class类文件,命名UserController然后继承基类Controller和use Illuminate\Http\Request;这样的基础控制器就能使用Controller的一些自带方法和传递的参数了

基础控制器

单行为控制器

如果一个控制器动作特别复杂,你会发现将整个控制器类专用于哪个单一动作是方便的。要实现这一点,你可以在控制器中定义一个单一的 __invoke 方法用以下命令生成单行为控制器:

php artisan make:controller OneController --invokable

也可以手动创建一个控制器然后继承Controller然后再创建一个__invoke方法

单行为控制器

这个单行为控制器创建好之后创建对应路由就不用写方法名只需要调用到控制器就行了,会自动调用控制器下的这个唯一的方法例如:

Route::get('one',OneController::class);

资源控制器

资源控制器是针对每个资源执行相同的一组动作,将典型的创建、读取、更新和删除(”CRUD”)路由分配给一个控制器。命令如下:

php artisan make:controller UserController --resource

执行后会获得一个user控制器,自带7个方法,分别是index、create、store、show、edit、update、destroy。配置好路由后会自动生成相关内容,这里只需要配置资源路由既可,不需要吧七个方法都单独写路由

//单个资源路由
Route::resource('user',UserController::class);
//批量注册资源路由,注意单个是resource,批量是resources
Route::resources([
    'user'=>UserController::class,
    'test'=>TestController::class
]);
请求类型路由URI控制器方法路由命名描述
GETuserindex()user.index获取数据列表
GETuser/createcreate()user.create新增页面(数据表单页面)
POSTuserstore()user.store新增数据接收处理方法
GETuser/{user}show()user.show获取一条数据详情
GETuser/{user}/editedit()user.edit编辑表单页面
PUT/PATHuser/{user}update()user.update编辑提交处理页面
DELETEuser/{user}destroy()user.destroy删除数据

资源路由也支持开放部分和排除部分

//只开放index和show
Route::resource("user",UserController::class)->only(['index','show']);
//排除index和show
Route::resource("user",UserController::class)->except(["index","show"]);

api资源路由

api资源路由和普通资源路由的区别在于不需要用于显示页面的路由

api资源控制器生成命令:

php artisan make:controller UserController --api

api资源路由:

//单个api资源路由
Route::apiResource("user",UserController::class);
//批量资源路由
Route::apiResources([
    "user" => UserController::class,
    "test" => TestController::class,
]);

嵌套资源

开发中遇到两个资源相互之间存在依赖关系的,例如文章和评论,就可以使用嵌套资源

资源路由嵌套

use App\Http\Controllers\CommentController;

Route::resource("article.comment",CommentController::class);

这样写就会自动帮我们生成对应的路由

请求类型路由URI控制器方法路由命名描述
GET/article/{article}/commentsindex()article.comments.index查看文章下所有评论
GET/article/{article}/comments/createcreate()article.comments.create跳转文章新增评论页面
POST/article/{article}/commentsstore()article.comments.store提交文章评论
GET/article/{article}/comments/{comment}show()comments.show查看文章下的评论
GET/article/{article}/comments/{comment}/editedit()comments.edit显示编辑指定文章下的指定评论页面
PUT/PATCH/article/{article}/comments/{comment}update()comments.update跳转编辑评论页面
DELETE/article/{article}/comments/{comment}destroy()comments.destroy删除指定评论

By cxp

发表回复