現(xiàn)在我們有一個 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){
}
}
根據(jù) @url 中寫的:/banner/:id
接下來,我們配置一下路由文件跛溉,可能首先我們會這樣掉進坑里:
use think\Route;
Route::get("banner/:id","api/controller/v1/Banner/getBanner");
然后一用 Postman 驗證一下就會發(fā)現(xiàn):
postman 顯示模塊不存在(z.cn是虛擬域名)
上面的方式肯定是錯誤的焊切,tp5中路徑不是和命名空間一個寫法的,它有自己的規(guī)范芳室。根據(jù)三段式(模塊/控制器/操作方法名)的要求专肪,我們之后可能會這樣掉入坑里:
Route::get("banner/:id","api/Banner/getBanner");
乍一看仿佛是沒有問題的,api 是模塊堪侯,Banner 是控制器牵祟,getBanner 是其操作方法名。但一運行:
控制器不存在
其實上面的做法忽略了 v1 目錄抖格,這種時候控制器有多級目錄诺苹,而 Banner 控制器不是直接位于 controller 文件夾下,而是位于子目錄 v1 下面雹拄。tp5 規(guī)定這種情況下需要 v1.Banner 進行訪問收奔。
Route::get("banner/:id","api/v1.Banner/getBanner");
這種設(shè)計也是有道理的,因為控制器這里一定不能傳入其命名空間滓玖,而要要三段式坪哄。
api/v1.Banner/getBanner(成功)