yii2-搭建RESTful Api:實戰教程【基礎篇-附帶採坑經驗】(一)

一. 先安裝yii2.0高級的應用程序模板

      操作:這裏不做詳細介紹,官方文檔上一個命令解決

二. 複製文件/目錄,修改對應配置文件/命名空間

      ① 將backend整個目錄複製一份出來,重新命名爲api放在項目根目錄

          

      ② 打開api/config/main.php修改配置文件中(id,controllerNamespace配置)

return [
    'id' => 'app-api',   //改成app-api
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'api\controllers',    //還有控制器的命名空間
     ……//還有一堆配置文件
]

       ③ 在yii當中,當我們創建一個新的模塊或者子模塊我們都要在common/config/boostrap.php寫個別名

Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');    //這個是我新增進來的

      ④ 對應的控制器代碼也要做出相應修改,模型層還是老樣子

<?php
namespace api\controllers;  //這個因爲目錄是拷貝過來的,記得修改過來
use yii\rest\ActiveController;   //這邊引入的文件變成這個了

/**
 * User controller
 */
class UserController extends ActiveController
{
    public $modelClass = 'common\models\User'; //這個也要加進去,否則會報錯,可以自由實驗下  
}

      ⑤ URL美化,前面我有寫過相對應的文章講解過,根據RESTful配置,我這邊把本地貼出來大家參考下

return[
    'components' => [
        "urlManager" => [
           "enablePrettyUrl" => true,
           "enableStrictParsing" => false,
           "rules" => [
                [
                    'class' => 'yii\rest\UrlRule',//如果提示這個類找不到,就是引入的位置錯誤了
                    'controller' => 'user',   //要把請求接口相對應的控制器都要加進來
                    'pluralize' => false,    //設置爲false 就可以去掉複數形式了
                ],//注意,這個地方寫的格式
                'GET get-user'=>'user/get-user' //路由映射(可有可不有,美觀效果,當然也有隱藏我們真是路由的功效)
           ],
        ],
        …… 
    ]
    ……
]
/*這裏有個坑,在yii的中國官方論壇裏,有個博主在GET get-user 這行前面添加了參數:extraPatterns會導致項目報錯,這邊路由的映射直接寫到rules的數組的第二個參數這邊,千萬別寫到裏面去了*/

     ⑥ 配置response相關信息

"components" => [
    'response' => [
        'class' => 'yii\web\Response',
           'on beforeSend' => function ($event) {
               $response = $event->sender;
               //這一塊要根據自己的業務邏輯,定義返回對應數據格式,以及相對應的狀態碼code
               $response->data = [
                  'success' => $response->isSuccessful,
                  'code' => 0, //可以根據自己的業務邏輯,成功失敗這邊自己定義
                  'message' => $response->statusText,
                  'data' => $response->data,
              ];
        },
    ],
]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章