yii2框架-restful的自定義api

如果想不按照yii2默認規定的那些寫接口來,如何重寫或者自定義呢?

在yii\rest\ActiveController.php中

  1. public function actions()  
  2.     {  
  3.         return [  
  4.             'index' => [  
  5.                 'class' => 'yii\rest\IndexAction',  
  6.                 'modelClass' => $this->modelClass,  
  7.                 'checkAccess' => [$this'checkAccess'],  
  8.             ],  
  9.             'view' => [  
  10.                 'class' => 'yii\rest\ViewAction',  
  11.                 'modelClass' => $this->modelClass,  
  12.                 'checkAccess' => [$this'checkAccess'],  
  13.             ],  
  14.             'create' => [  
  15.                 'class' => 'yii\rest\CreateAction',  
  16.                 'modelClass' => $this->modelClass,  
  17.                 'checkAccess' => [$this'checkAccess'],  
  18.                 'scenario' => $this->createScenario,  
  19.             ],  
  20.             'update' => [  
  21.                 'class' => 'yii\rest\UpdateAction',  
  22.                 'modelClass' => $this->modelClass,  
  23.                 'checkAccess' => [$this'checkAccess'],  
  24.                 'scenario' => $this->updateScenario,  
  25.             ],  
  26.             'delete' => [  
  27.                 'class' => 'yii\rest\DeleteAction',  
  28.                 'modelClass' => $this->modelClass,  
  29.                 'checkAccess' => [$this'checkAccess'],  
  30.             ],  
  31.             'options' => [  
  32.                 'class' => 'yii\rest\OptionsAction',  
  33.             ],  
  34.         ];  
  35.     }  
這是默認的接口方法,那麼如何重寫呢?
我們可以在Controller中重寫action()這個函數從而實現重寫

  1. namespace api\modules\v1\controllers;  
  2. use Yii;  
  3. use yii\rest\ActiveController;  
  4. use yii\data\ActiveDataProvider;  
  5. use api\models\Order;  
  6.   
  7. class UsersController extends ActiveController {  
  8.     public $modelClass = 'api\modules\v1\models\User';  
  9.       
  10.     public function actions() {  
  11.         $actions = parent::actions();  
  12.         // 禁用""index,delete" 和 "create" 操作  
  13.         unset($actions['index'],$actions['delete'], $actions['create']);  
  14.           
  15.         return $actions;  
  16.   
  17.     }  
  18.     //重寫index的業務實現  
  19.     public function actionIndex()  
  20.     {  
  21.         $modelClass = $this->modelClass;  
  22.         return new ActiveDataProvider([  
  23.             'query' => $modelClass::find()->asArray(),  
  24.               
  25.             'pagination' => false  
  26.         ]);  
  27.     }   
  28.   
  29. }  
a)因爲訪問的時候先去執行actions方法裏面的對應獨立操作,如果找不到再去找對應的內聯操作。
b)actions方法的執行$actions = parent::actions();然後將$actions的需要重寫的方法禁用(刪除),然後return $actions 就沒有這個方法了,所以就會執行內聯操作actionIndex()這個方法,而我們的重寫業務就是在這個actionIndex()方法中。其他的方法也是這樣子重寫。

如果我們想在自己定義不同的api接口方法呢?
那麼我們可以通過配置實現,在main.php的主文件中

  1. 'urlManager' => [  
  2.     'enablePrettyUrl' => true,  
  3.     'showScriptName' => false,  
  4.     'rules' => [  
  5.         [  
  6.             'class' => 'yii\rest\UrlRule',  
  7.             'controller' => ['v1/users'],  
  8.             'pluralize' => false,  
  9.             'extraPatterns' => [  
  10.                 'GET versions' => 'version',  
  11.                 'GET search/<id:\d+>' => 'search',  
  12.                 'POST newusers' => 'add'  
  13.             ],  
  14.               
  15.         ],  
  16.     ],  
  17. ],  
"extraPatterns"這個屬性是額外模式配置
a)'GET versions' => 'version',代表獲取接口版本,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/versions ,對應的內聯操作actionVersion();


b)'GET searches/<id:\d+>' => 'search', 代表搜索一個指定id的用戶,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/searches/1,對應的內聯操作actionSearches();



c)'POST newusers' => 'add',代表添加一個用戶,例如http://localhost/lianxi/XML/advanced/api/web/v1/users/newusers,對應的內聯操作actionAdd();

我們只需要在控制器中實現這些方法,完成相應的邏輯業務,那麼各個需要的接口就完成了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章