• 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就可以
     
     
     
  • 相关阅读:
    Windows下给你mac下的开发体验 windows+wsl+zsh+vscode
    Puppeteer在docker下踩坑记录
    egret EUI加载 JSZip打包DragonBones二进制文件
    nodeJS rsasha加密
    Elasticsearch 聚合字段后 获取聚合字段的单条详细信息
    【转发自用】Apache2.4服务器权限设置问题
    C#重写VIVO支付SDK VivoSignUtils
    VS2017 空白 node.js web应用程序
    less开发
    获取样式getComputedStyle
  • 原文地址:https://www.cnblogs.com/bushui/p/14295515.html
Copyright © 2020-2023  润新知