tp5 自定义控制器多级目录

现在我们有一个 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(成功)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 理工寝室商店-微信小程序 疑问小结 当时在XAMMP下mysql目录下的bin下 php -v 不起作用.到ph...
    这个超人不会飞阿阅读 1,827评论 1 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,247评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,665评论 19 139
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 4,364评论 0 5
  • 【回忆醉酒】 戒酒多年 醉酒 已成 回忆 记得最后 一次 醉 得像 一摊狗屎 平常里 只有一百来斤 的身体 其时被...
    长衣倍倍阅读 385评论 3 6

友情链接更多精彩内容