在yii\rest\ActiveController.php中
- public function actions()
- {
- return [
- 'index' => [
- 'class' => 'yii\rest\IndexAction',
- 'modelClass' => $this->modelClass,
- 'checkAccess' => [$this, 'checkAccess'],
- ],
- 'view' => [
- 'class' => 'yii\rest\ViewAction',
- 'modelClass' => $this->modelClass,
- 'checkAccess' => [$this, 'checkAccess'],
- ],
- 'create' => [
- 'class' => 'yii\rest\CreateAction',
- 'modelClass' => $this->modelClass,
- 'checkAccess' => [$this, 'checkAccess'],
- 'scenario' => $this->createScenario,
- ],
- 'update' => [
- 'class' => 'yii\rest\UpdateAction',
- 'modelClass' => $this->modelClass,
- 'checkAccess' => [$this, 'checkAccess'],
- 'scenario' => $this->updateScenario,
- ],
- 'delete' => [
- 'class' => 'yii\rest\DeleteAction',
- 'modelClass' => $this->modelClass,
- 'checkAccess' => [$this, 'checkAccess'],
- ],
- 'options' => [
- 'class' => 'yii\rest\OptionsAction',
- ],
- ];
- }
我們可以在Controller中重寫action()這個函數從而實現重寫
- namespace api\modules\v1\controllers;
- use Yii;
- use yii\rest\ActiveController;
- use yii\data\ActiveDataProvider;
- use api\models\Order;
- class UsersController extends ActiveController {
- public $modelClass = 'api\modules\v1\models\User';
- public function actions() {
- $actions = parent::actions();
- // 禁用""index,delete" 和 "create" 操作
- unset($actions['index'],$actions['delete'], $actions['create']);
- return $actions;
- }
- //重寫index的業務實現
- public function actionIndex()
- {
- $modelClass = $this->modelClass;
- return new ActiveDataProvider([
- 'query' => $modelClass::find()->asArray(),
- 'pagination' => false
- ]);
- }
- }
b)actions方法的執行$actions = parent::actions();然後將$actions的需要重寫的方法禁用(刪除),然後return $actions 就沒有這個方法了,所以就會執行內聯操作actionIndex()這個方法,而我們的重寫業務就是在這個actionIndex()方法中。其他的方法也是這樣子重寫。
如果我們想在自己定義不同的api接口方法呢?
那麼我們可以通過配置實現,在main.php的主文件中
- 'urlManager' => [
- 'enablePrettyUrl' => true,
- 'showScriptName' => false,
- 'rules' => [
- [
- 'class' => 'yii\rest\UrlRule',
- 'controller' => ['v1/users'],
- 'pluralize' => false,
- 'extraPatterns' => [
- 'GET versions' => 'version',
- 'GET search/<id:\d+>' => 'search',
- 'POST newusers' => 'add'
- ],
- ],
- ],
- ],
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();
我們只需要在控制器中實現這些方法,完成相應的邏輯業務,那麼各個需要的接口就完成了。