欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          實例詳解thinkphp6搭建后端api接口

          本篇文章給大家?guī)砹岁P(guān)于thinkPHP的相關(guān)知識,其中主要介紹了搭建后端api接口的相關(guān)問題,主要內(nèi)容有下載tp6、隱藏入口文件、解決跨域問題等等,希望對大家有幫助。

          實例詳解thinkphp6搭建后端api接口

          推薦學(xué)習(xí):《PHP視頻教程》

          1、下載tp6

          我使用的是集成環(huán)境phpstuday,安裝了composer,通過composer安裝tp6,thinkphp官網(wǎng)已經(jīng)不再支持直接下載。

          composer create-project topthink/think tp6

          你也可以直接按照tp6看云文檔的步驟來安裝tp6

          在下載好的tp6目錄通過cmd命令窗口輸入

          php think run

          在瀏覽器中輸入127.0.0.1:8000,訪問到如下頁面就安裝成功了
          實例詳解thinkphp6搭建后端api接口

          2、打開錯誤調(diào)試

          在開始之間,我們先打開tp6的錯誤調(diào)試
          1.找到config/app.php下的show_error_msg ,改成true
          實例詳解thinkphp6搭建后端api接口
          2.找到下面根目錄下的.example.env文件,重命名此文件,把.example刪掉
          實例詳解thinkphp6搭建后端api接口
          查看這里面的代碼,會發(fā)現(xiàn),它打開了app_debug調(diào)試
          實例詳解thinkphp6搭建后端api接口
          這樣我們就能看到完整的報錯信息了,例如:
          實例詳解thinkphp6搭建后端api接口

          3、隱藏入口文件

          在第1節(jié)中,我們訪問

          http://127.0.0.1:8000

          實際訪問的是

          http://127.0.0.1:8000/index.php/index/index

          你也可以通過這樣的方式訪問

          http://127.0.0.1:8000/index/index

          如果什么都不填,默認訪問的就是index控制器,在config/app.php文件中有這樣的定義,你也可以修改默認的控制器
          實例詳解thinkphp6搭建后端api接口
          還有,不管訪問任何控制器,如果沒有填方法,它都會訪問控制器中的index方法,如果index方法不存在,則提示錯誤信息-方法不存在。
          通過在項目根目錄中運行的php think run開啟的web服務(wù),tp6幫我們做了隱藏入口文件的操作,所以你可以通過第三種方式訪問。但是我們這一節(jié)要說的就是隱藏入口,怎么能用tp6自帶的web服務(wù)呢。所以要自己來。
          我們在開發(fā)時,往往會在本地搭建WNMP等這樣的一套web解決方案,這就需要我們自己去隱藏入口文件index.php

          為什么要隱藏入口文件?

          1. 因為像這樣子http://127.0.0.1:4321/index.php/index/index訪問方法,這個index.php很不好看。
          2. 多余。
          3. 危險

          我這里因為用的集成環(huán)境,選用的是apache服務(wù)器,所以我只找了apache的隱藏入口文件的方法,nginx的需要自己搜索了。
          現(xiàn)在我啟用apache服務(wù)器,開的端口是4321
          實例詳解thinkphp6搭建后端api接口

          當(dāng)我想通過

          http://127.0.0.1:4321/index/index

          去訪問方法時,訪問失敗
          實例詳解thinkphp6搭建后端api接口
          而我加上入口文件訪問時,訪問成功

          http://127.0.0.1:4321/index.php/index/index

          實例詳解thinkphp6搭建后端api接口
          實現(xiàn)隱藏index.php很簡單,只需要找到public目錄下的.htaccess文件,添加如下代碼就可以了。

          <IfModule mod_rewrite.c> #如果mode_rewrite.c模塊存在 則執(zhí)行以下命令   Options +FollowSymlinks -Multiviews   RewriteEngine On #開啟 rewriteEngine   # !-d 不是目錄或目錄不存在   RewriteCond %{REQUEST_FILENAME} !-d    # !-f 不是文件或文件不存在   RewriteCond %{REQUEST_FILENAME} !-f     RewriteRule ^(.*)$ index.php [QSA,PT,L]   # 參數(shù)解釋   # ^(.*)$: 匹配所有的路口映射   # QSA: (Query String Appending)表示保留參數(shù)入get傳值?xxx==xx;   # PT: 把這個URL交給Apache處理;   # L: 作為最后一條,遇到這條將不再匹配這條之后的規(guī)則</IfModule>

          現(xiàn)在訪問

          http://127.0.0.1:4321/index/index

          訪問成功
          實例詳解thinkphp6搭建后端api接口

          需要注意,在第一節(jié)中我們看到,運行了php think run 后,我們的項目目錄訪問的是public目錄
          實例詳解thinkphp6搭建后端api接口
          官方文檔中也說在項目中應(yīng)該只有public目錄是可以被外界訪問的,所以如果有什么需要訪問的圖片、視頻等資源,應(yīng)該放在此目錄下

          4、解決跨域問題

          在應(yīng)用開發(fā)中,前后端都是分開獨立開發(fā)的,而前后端通常都會自己搭建一個web服務(wù),運行在不同的端口上,在前端訪問后端的接口時,會報跨域的錯誤。而這種跨域問題通常是要有后端來處理的,tp6有專門的中間件來做這個事情,真是太方便了,只需要在app目錄下的middleware.php中添加該中間件,就實現(xiàn)了跨域訪問。

          <?php// 全局中間件定義文件return [     // 全局請求緩存     // thinkmiddlewareCheckRequestCache::class,     // 多語言加載     // thinkmiddlewareLoadLangPack::class,     // Session初始化     // thinkmiddlewareSessionInit::class     // 跨域解決     thinkmiddlewareAllowCrossDomain::class,];

          5、路由解決api版本控制

          在app目錄中的container控制器中新建兩個文件夾v1,v2,在其中都創(chuàng)建User.php文件
          實例詳解thinkphp6搭建后端api接口
          v1/User.php

          <?phpnamespace appcontrollerv1;use appBaseController;class User extends BaseController{     public function login()     {       return '我是v1';     }}

          v2/User.php

          <?phpnamespace appcontrollerv2;use appBaseController;class User extends BaseController{     public function login()     {       return '我是v2';     }}

          注意上面兩個文件的命名空間,就第一行代碼,在哪個文件夾下,就寫到哪里。
          現(xiàn)在方法有了,我們還無法訪問,需要使用路由,讓路由幫我們找對應(yīng)的方法。

          至于路由的概念去文檔自己看。我這里主要用路由組的方式,我覺得這個比資源路由好用,靈活。

          在根目錄下的route目錄下的app.php文件代碼如下:

          <?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail.com>// +----------------------------------------------------------------------use thinkfacadeRoute;// api版本控制$v = request()->header('Api-Version');// 默認api版本為v1if ($v == null) $v = "v1";// 用戶Route::group('user', function () {   Route::post('login', 'login');})->prefix($v.'.user/')->pattern(['id' => 'd+']);

          以上代碼進行控制api版本的方式是,請求發(fā)起者在header中傳遞要訪問的api的版本,這里獲取到對應(yīng)的版本,訪問對應(yīng)的方法。

          鑒于以上我使用的是post請求,且要傳遞header,所以使用postman進行測試。
          訪問v1版本的接口時:
          實例詳解thinkphp6搭建后端api接口
          訪問v12版本的接口時:
          實例詳解thinkphp6搭建后端api接口

          6、jwt token驗證

          我用的是tp6看云文檔收錄的插件

          composer require thans/tp-jwt-auth

          該插件的github地址-文檔
          在開始之前可以看看文檔里是怎么操作的,我也是按照文檔來的

          安裝完成后,該插件所在的位置在根目錄下的vendor/thans/tp-jwt-auth
          還會在根目錄下的config目錄下生成jwt.php文件來記錄一些配置信息
          實例詳解thinkphp6搭建后端api接口
          看這里都是讀取的env中的參數(shù),所以咱也在根目錄下的.env文件中配置參數(shù)。
          在根目錄下打開cmd窗口,執(zhí)行

          php think jwt:create

          會幫你在.env文件中生成密鑰secret,紅色框中的是新增的內(nèi)容
          實例詳解thinkphp6搭建后端api接口
          token的有效期為60秒,為了方便我們測試,我就不改了,如果你要改,可以在.env中添加,這樣就改成了1小時
          實例詳解thinkphp6搭建后端api接口
          這個插件有三種方式【header,token,param】傳遞token,我就使用其中一個,也是最常用的一種,就是在【header】中傳遞token信息,這個插件默認驗證header中的token信息需要傳遞的參數(shù)名為authorization,而在header中直接傳遞該參數(shù)tp6是獲取不到的,需要做一些設(shè)置,
          在根目錄中的public目錄下的.htacccess文件中添加

          SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

          實例詳解thinkphp6搭建后端api接口
          那么現(xiàn)在開始測試:

          (1).生成token

          我就在之前創(chuàng)建的v1/User.php控制器中寫了

          <?phpnamespace appcontrollerv1;use appBaseController;// 引入jwt插件use thansjwtfacadeJWTAuth;class User extends BaseController{     public function login()     {       // 生成token       $token = JWTAuth::builder(['uid' => 1,'name'=>'ceshi']);       return $token;     }}

          在postman中測試
          實例詳解thinkphp6搭建后端api接口

          (2).驗證token

          我使用的是路由中間件的方式驗證token,

          寫一個中間件

          在根目錄下的app目錄中創(chuàng)建middleware目錄,在其下創(chuàng)建CheckToken.php文件
          app/middleware/CheckToken.php
          實例詳解thinkphp6搭建后端api接口
          文件內(nèi)容

          <?phpnamespace appmiddleware;use thansjwtfacadeJWTAuth;use thansjwtexceptionJWTException;class CheckToken{     public function handle($request, Closure $next)     {     	// OPTIONS請求直接返回         if ($request->isOptions()) {             return response();         }     	try {             JWTAuth::auth();         }catch (JWTException $e) {         	return json($e->getMessage());         }         return $next($request);     }}
          起別名

          給該中間件起個別名,在根目錄下的config/middleware.php文件中
          實例詳解thinkphp6搭建后端api接口

          在路由文件中使用中間件

          實例詳解thinkphp6搭建后端api接口

          創(chuàng)建對應(yīng)的方法

          在第三步中我們創(chuàng)建了一個getUserInfo()方法,現(xiàn)在在User.php文件中創(chuàng)建

          public function getUserInfo() {    return json(['id'=>1, 'name'=> '啦啦啦']);}

          實例詳解thinkphp6搭建后端api接口

          驗證一下

          剛剛創(chuàng)建的token必然過期了,咱重新獲取一條
          實例詳解thinkphp6搭建后端api接口

          現(xiàn)在驗證一下,請求userinfo方法,并在header中添加參數(shù)Authorization,
          注意:token值需要加上bearer ,bearer后的空格也要的。
          實例詳解thinkphp6搭建后端api接口
          過了一分鐘后,我們再來試一試
          實例詳解thinkphp6搭建后端api接口
          可以看到token驗證提示,該通過過期了,這個插件成功了,并沒有繼續(xù)往下走,把之前的信息返回。

          (3).注銷token

          這個插件在github中的文檔中沒有說到怎么注銷或刪除token,只有一個刷新refresh和拉黑invalidate,我看了一下它的代碼,刷新方法中會調(diào)用拉黑方法,看到這個注釋,讓我激動了一下,雞兒!原來拉黑就是注銷
          實例詳解thinkphp6搭建后端api接口
          這個拉黑的具體操作就是把你要注銷的token保存在本地的cookie中,默認的保存時間是14天,14天后cookie會自己刪除的,你可以在根目錄下的runtime目錄下的cache目錄中找到對應(yīng)的文件,我就不測試這個方法了,我感覺這個操作好像沒什么必要。

          文件內(nèi)容形似這樣
          實例詳解thinkphp6搭建后端api接口
          至此token這節(jié)就結(jié)束了。

          什么?
          你想改默認的token名稱?那你可得好好研究這個插件了,看看怎么改,改完了記得踢我一腳,讓我也看看,雖然我覺得一個Authorization已經(jīng)夠用了。
          實例詳解thinkphp6搭建后端api接口

          7、統(tǒng)一的參數(shù)返回形式

          實際開發(fā)中,后端返回給前端的參數(shù)往往都是這樣的。
          實例詳解thinkphp6搭建后端api接口
          所以我們需要對參數(shù)返回形式做個統(tǒng)一的處理
          在app目錄下的common.php中定義的方法全局都可調(diào)用,所以在這個文件中定義此方法。

          <?phpuse thinkResponse;// 應(yīng)用公共文件// 統(tǒng)一返回數(shù)據(jù)格式function result($data = [], string $msg = 'error', int $code = 200, string $type = 'json'):Response {   $result = [       "code" => $code,       "msg" => $msg,       "data" => $data   ];   // 調(diào)用Response的create方法,指定code可以改變請求的返回狀態(tài)碼   return Response::create($result, $type)->code($code);}

          唉,這個時候,經(jīng)驗的重要性就體現(xiàn)出來,我是個前端,而且在我自己看來,還算是個沒有工作經(jīng)驗的前端,

          1. 不知道他們后端到底怎么處理這個狀態(tài)碼,網(wǎng)上的東西越看越亂,狀態(tài)碼可以分為業(yè)務(wù)狀態(tài)碼和請求返回的狀態(tài)碼,我這里就簡單了,就只有請求返回的狀態(tài)碼,雖然在返回的數(shù)據(jù)中也傳遞了這個碼,其實沒什么用,小項目、不復(fù)雜的項目根本用不少業(yè)務(wù)狀態(tài)碼。
          2. 我看別人還會單獨分裝成功和失敗的方法,這個就看自己習(xí)慣了,我感覺好像沒啥必要。
          3. 終究是經(jīng)驗不足,網(wǎng)上能參考的代碼太少,還千篇一律,最可氣的是一篇文章居然可以在多個博客網(wǎng)站上出現(xiàn),別人抄的、復(fù)制的就算了,作者自己也發(fā)這么多地方,真的搞笑,百度一下,跳出來全是同一個,標題也是一樣,很迷~。

          調(diào)用就很簡單了,可以直接使用
          我們還是改一下login方法

          public function login(){    $data = [      ['id'=>1,'name'=>'杰森'],      ['id'=>2,'name'=>'麥克']    ];    $code = 200;    $msg = '獲取成功';    return result($data, $msg, $code);  }

          實例詳解thinkphp6搭建后端api接口
          返回結(jié)果
          實例詳解thinkphp6搭建后端api接口
          這樣好像沒有體現(xiàn)我們修改的請求的狀態(tài)碼,那我們把$code改成500,再來看看結(jié)果如何
          實例詳解thinkphp6搭建后端api接口
          咱已經(jīng)成功的將改請求狀態(tài)變成了500
          得嘞,現(xiàn)在再來回頭看看我們之前寫的檢查jwt的中間件,把返回的結(jié)果封裝一下
          實例詳解thinkphp6搭建后端api接口
          再去驗證一下看看,看著返回的結(jié)果就舒服多了,這特么才是后端給前端返回的結(jié)果。
          實例詳解thinkphp6搭建后端api接口
          本小節(jié)結(jié)束,記錄一下一些常見的狀態(tài)碼,我在自己寫的時候就只用到了這些狀態(tài)碼

          狀態(tài)碼 描述
          200 請求成功
          204 請求成功,未返回實體,比如option請求,這玩意兒用不著呀
          400 錯誤的請求
          401 認證失敗,這個一般在token驗證那里
          403 拒絕訪問
          404 請求的資源不存在
          422 參數(shù)驗證錯誤
          500 服務(wù)器錯誤

          7、異常捕捉

          異常捕捉(看云文檔)內(nèi)容挺多的,自己去百度吧,我就把我遇到過的常見的錯誤進行捕捉,其它的異常我也愛莫能助,不懂啊 !>_>!
          我也就不自定義類了,直接在它給的默認的異常處理文件里寫了。
          實例詳解thinkphp6搭建后端api接口

          (1)參數(shù)驗證錯誤捕捉

          我們先寫一個參數(shù)驗證的類,在app目錄下創(chuàng)建validate目錄,創(chuàng)建User.php文件
          實例詳解thinkphp6搭建后端api接口
          app/validate/User.php

          <?phpnamespace appvalidate;use thinkValidate;class User extends Validate{     protected $rule =   [         'name'  => 'require|max:25',         'age'   => 'number|between:1,120',         'email' => 'email',         ];          protected $message  =   [         'name.require' => '名稱必須',         'name.max'     => '名稱最多不能超過25個字符',         'age.number'   => '年齡必須是數(shù)字',         'age.between'  => '年齡只能在1-120之間',         'email'        => '郵箱格式錯誤',         ];     }

          tp6的異常捕捉分為兩種,自動和手動的,手動的就是通過try{}catch{}捕捉。tp6的異常捕捉大多是自動的,不過,比如我們現(xiàn)在要操作的參數(shù)驗證錯誤就需要自己去捕捉來拋出異常,我們此節(jié)的目的是統(tǒng)一捕捉這個錯誤,我就不用手動的了。
          我們就在異常處理類的render方法中添加這個捕捉拋出就可以了。
          實例詳解thinkphp6搭建后端api接口

          // 1.參數(shù)驗證錯誤  if ($e instanceof ValidateException) {      return result($e->getError(), '參數(shù)驗證不通過', 422);  }

          現(xiàn)在在方法中一下,看看能否捕獲。
          app/controller/v1/User.php
          實例詳解thinkphp6搭建后端api接口
          查看結(jié)果,成功被捕獲到了,并拋出了錯誤內(nèi)容
          實例詳解thinkphp6搭建后端api接口
          如果驗證通過了,就會正常的走下去,則會顯示我return的測試內(nèi)容
          實例詳解thinkphp6搭建后端api接口

          (2)未匹配到資源或方法的異常捕獲

          我還沒找到方法,在我的預(yù)想中這個應(yīng)該要做到能夠準確的反應(yīng)未匹配到的原因。

          // 2.方法(控制器、路由、http請求)、資源(多媒體文件,如視頻、文件)未匹配到,// 一旦在定義的路由規(guī)則中匹配不到,它就會直接去匹配控制器,但是因為在控制器中做了版本控制v1,v2這樣的,所以它是無法獲取對應(yīng)控制器的// 所以都會直接走了HttpException的錯誤// 感覺好像也無所謂,反正是做api接口的,只不過這樣就不好準確的提示信息了// 到底這個請求時控制器找不到呢?還是方法找不到?還是請求類型(get,post)不對?if(($e instanceof ClassNotFoundException || $e instanceof RouteNotFoundException) || ($e instanceof HttpException && $e->getStatusCode()==404)){   $data = [     'err_msg' => $e -> getMessage(),     'tips_1' => '請檢查路徑是否是否填寫正確',     'tips_2' => '請檢查請求類型是否正確',   ];   return result($data, '方法或資源未找到,請檢查', 404);}

          下面就不寫了,太麻煩了,直接放全部代碼

          <?phpnamespace app;use ParseError; // 語法錯誤use TypeError;use InvalidArgumentException; // 參數(shù)錯誤use thinkdbexceptionDataNotFoundException;use thinkdbexceptionModelNotFoundException;use thinkdbexceptionPDOException; // 數(shù)據(jù)庫連接錯誤use thinkdbexceptionDbException; // 數(shù)據(jù)庫模型訪問錯誤,比如方法不存在use thinkexceptionRouteNotFoundException;use thinkexceptionClassNotFoundException;use thinkexceptionFuncNotFoundException;use thinkexceptionFileException;use thinkexceptionHandle;use thinkexceptionHttpException;use thinkexceptionHttpResponseException;use thinkexceptionValidateException;use thinkexceptionErrorException;use thinkResponse;use Throwable;/**  * 應(yīng)用異常處理類  */class ExceptionHandle extends Handle{     /**      * 不需要記錄信息(日志)的異常類列表      * @var array      */     protected $ignoreReport = [         HttpException::class,         HttpResponseException::class,         ModelNotFoundException::class,         DataNotFoundException::class,         ValidateException::class,     ];      /**      * 記錄異常信息(包括日志或者其它方式記錄)      *      * @access public      * @param  Throwable $exception      * @return void      */     public function report(Throwable $exception): void     {         // 使用內(nèi)置的方式記錄異常日志         parent::report($exception);     }      /**      * Render an exception into an HTTP response.      *      * @access public      * @param thinkRequest   $request      * @param Throwable $e      * @return Response      */     public function render($request, Throwable $e): Response     {         // 添加自定義異常處理機制         // 請求異常         if ($e instanceof HttpException && $request->isAjax()) {             return response($e->getMessage(), $e->getStatusCode());         }         // 使用了錯誤的數(shù)據(jù)類型 或 缺失參數(shù)         if ($e instanceof InvalidArgumentException || $e instanceof ErrorException) {           $fileUrlArr = explode(DIRECTORY_SEPARATOR, $e->getFile());           $data = [             'err_msg' => $e->getMessage(),             'file' => $fileUrlArr[count($fileUrlArr) - 1],             'line' => $e->getLine()           ];           return result($data, '參數(shù)錯誤', 413);         }         // 1.參數(shù)驗證錯誤         if ($e instanceof ValidateException) {             return result($e->getError(), '參數(shù)驗證不通過', 422);         }         // 2.方法(控制器、路由、http請求)、資源(多媒體文件,如視頻、文件)未匹配到,         // 一旦在定義的路由規(guī)則中匹配不到,它就會直接去匹配控制器,但是因為在控制器中做了版本控制v1,v2這樣的,所以它是無法獲取對應(yīng)控制器的         // 所以都會直接走了HttpException的錯誤         // 感覺好像也無所謂,反正是做api接口的,只不過這樣就不好準確的提示信息了         // 到底這個請求時控制器找不到呢?還是方法找不到?還是請求類型(get,post)不對?         if(($e instanceof ClassNotFoundException || $e instanceof RouteNotFoundException) || ($e instanceof HttpException && $e->getStatusCode()==404)){           $data = [             'err_msg' => $e -> getMessage(),             'tip_1' => '請檢查路徑是否是否填寫正確',             'tips_2' => '請檢查請求類型是否正確',           ];           return result($data, '方法或資源未找到,請檢查', 404);         }         // 3.語法錯誤         if ($e instanceof ParseError) {           $fileUrlArr = explode(DIRECTORY_SEPARATOR, $e->getFile());           $data = [             'err_msg' => $e->getMessage(),             'file' => $fileUrlArr[count($fileUrlArr) - 1],             'line' => $e->getLine()           ];           return result($data, '服務(wù)器異常-語法錯誤', 411);         }         // 4.數(shù)據(jù)庫錯誤         if ($e instanceof PDOException || $e instanceof DbException) {           $fileUrlArr = explode(DIRECTORY_SEPARATOR, $e->getFile());           $data = [             'err_msg' => $e->getMessage(),             'file' => $fileUrlArr[count($fileUrlArr) - 1],             'line' => $e->getLine()           ];           return result($data, '服務(wù)器異常-數(shù)據(jù)庫錯誤', 412);         }         // 其他錯誤交給系統(tǒng)處理         return parent::render($request, $e);     }}

          本節(jié)結(jié)束,這里面用的錯誤處理都是我在平常練習(xí)中遇到的錯誤,至于其他的沒有處理是因為我還沒碰到,碰到再說吧。為了給前端好的反饋,我們應(yīng)該處理所有的異常的返回形式,不然,tp6默認返回頁面形式的,前端等于得不到相應(yīng)了。至于這個自定義異常捕獲,應(yīng)該有相應(yīng)的插件的吧,你要是感興趣可以去找找。

          7、自動生成api文檔

          之前我還很好奇,后端是怎么搞出接口文檔的,都是自己錄入數(shù)據(jù)套模板的嗎?原來他么的都是插件做的,真他么方便!??!

          (1)安裝插件

          composer require hg/apidoc// 文檔// https://hgthecode.github.io/thinkphp-apidoc/guide/install/

          你就照著插件的文檔來就好了,不用跟著我。

          (2)下載對應(yīng)的前端頁面

          下載最新的,放在public目錄下
          實例詳解thinkphp6搭建后端api接口

          (3)使用

          具體配置你還得看文檔,我就直接照著最簡單的做了,
          我就試一個,將app/controller/v1/User.php寫了注釋,它會讀注釋生成接口文檔

          引入注釋

          app/controller/v1/User.php

          <?phpnamespace appcontrollerv1;use appBaseController;// 添加這句,注釋寫法為 @Apidoc參數(shù)名(...)use hgapidocannotation as Apidoc;/**  * @ApidocTitle("V1")  * @ApidocGroup("base")  */class User extends BaseController{     /**       * @ApidocTitle("登錄")       * @ApidocUrl("v1.user/login")       * @ApidocTag("測試 基礎(chǔ)")       * @ApidocParam("username", type="string",require=true, desc="用戶名" )       * @ApidocParam("password", type="string",require=true, desc="密碼" )       * @ApidocReturned("id", type="int", desc="新增用戶的id")       */      public function login()     {        return result(null, '成功', 200);     }}
          查看效果

          實例詳解thinkphp6搭建后端api接口
          這個接口文檔這里有點小問題,因為我們前面使用在header中添加api版本的方式控制請求的api版本,所以如果直接用/user/login是無法訪問到控制器的,也就訪問不到方法,必須得加上控制器所在位置的信息,就在前面加上了v1,變成了v1.user/login。這種形式是通過控制器去訪問的方法,顯然不理想,我想要達到的目標是不需要再里面加上v1,這個還得好好研究研究,不然前面定義的路由不是跟這個接口文檔對不上了嗎?你們要是研究到了,記得踢我一腳哈 >_>!

          #后記:當(dāng)時只是練習(xí)一下我,我也沒深究,but其實這個apidoc它的官方文檔里有設(shè)置項的,關(guān)于這個多應(yīng)用/多版本的配置項,去apidoc的文檔去看吧,在config/apidoc.php修改apps的配置就可以了,然后就可以通過右上角的選擇框切換版本了

              // 設(shè)置應(yīng)用/版本(必須設(shè)置)     'apps'           => [         [             'title'=>'演示示例',             'path'=>'app',             'folder'=>'controller',             'items'=>[                 ['title'=>'V1.0','path'=>'appcontrollerv1','folder'=>'v1'],                 ['title'=>'V2.0','path'=>'appcontrollerv2','folder'=>'v2']             ]         ],     ],

          推薦學(xué)習(xí):《PHP視頻教程》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號