美文网首页
tp5 自定义控制器多级目录

tp5 自定义控制器多级目录

作者: 风声233 | 来源:发表于2018-08-21 13:14 被阅读1510次

    现在我们有一个 Banner.php 文件。
    我们先来看一下这个接口的多级目录与命名空间:


    接口的文件目录

    由于这里需要一个 v1 文件夹来表示版本号,所以控制器的 php 文件并不是直接位于 controller 文件夹下的。

    <?php
    
    namespace app\api\controller\v1;
    
    class Banner
    {
        /**
         * @url /banner/:id
         * @http GET
         * @id banner的id号
         */
        public function getBanner($id){
        }
    }
    

    根据 @url 中写的:/banner/:id
    接下来,我们配置一下路由文件,可能首先我们会这样掉进坑里:

    use think\Route;
    Route::get("banner/:id","api/controller/v1/Banner/getBanner");
    

    然后一用 Postman 验证一下就会发现:


    postman 显示模块不存在(z.cn是虚拟域名)

    上面的方式肯定是错误的,tp5中路径不是和命名空间一个写法的,它有自己的规范。根据三段式(模块/控制器/操作方法名)的要求,我们之后可能会这样掉入坑里:

    Route::get("banner/:id","api/Banner/getBanner");
    

    乍一看仿佛是没有问题的,api 是模块,Banner 是控制器,getBanner 是其操作方法名。但一运行:


    控制器不存在

    其实上面的做法忽略了 v1 目录,这种时候控制器有多级目录,而 Banner 控制器不是直接位于 controller 文件夹下,而是位于子目录 v1 下面。tp5 规定这种情况下需要 v1.Banner 进行访问。

    Route::get("banner/:id","api/v1.Banner/getBanner");
    

    这种设计也是有道理的,因为控制器这里一定不能传入其命名空间,而要要三段式。


    api/v1.Banner/getBanner(成功)

    相关文章

      网友评论

          本文标题:tp5 自定义控制器多级目录

          本文链接:https://www.haomeiwen.com/subject/wbgdiftx.html