在 控制器中,常用的几行代码
<?php namespace wxapi\controllers; use yii\rest\ActiveController; use yii\data\ActiveDataProvider; use yii\Helpers\ArrayHelper; use wxapi\models\Post; class PostController extends ActiveController { public $modelClass = 'wxapi\models\Post'; public function actions() { $actions = parent::actions(); // 禁用 "delete" 和 "create" 动作 unset($actions['delete'], $actions['create']); unset($actions['index']); // 使用 "prepareDataProvider()" 方法自定义数据 provider //$actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider']; return $actions; } // 这两种方法都可以自定义接口返回的数据 一个采用 ActiveDataProvider,不要忘了写 asArray() // 另一个直接用模型返回数据 public function actionIndex() { //这么写代码貌似就可以绕过自定义的模型,直接使用原来web的模型 // $modelClass = $this->modelClass; // return new ActiveDataProvider([ // 'query' => $modelClass::find()->asArray(), // 'sort' => [ // 'defaultOrder' => [ // 'created' => SORT_DESC, // ] // ], // 'pagination' => false // ]); // 这样写可以使用我们自定义的模型 return Post::find()->where(['isindex'=>1])->orderBy(['created'=>SORT_DESC])->all(); } // 自定义搜索方法,需在路由规则中配置 // http://192.168.50.225/p/search/2019 public function actionSearch($keyword){ if(!$keyword){ return null; } $models = Post::find()->where(['like', 'title', $keyword])->all(); return $models; } }
模型中,也可以控制数据的返回情况,当然最好重新写个模型,不要直接用原来web的模型
<?php namespace wxapi\models; use wx\models\Wxpost; class Post extends Wxpost { public function fields() { $fields = parent::fields(); // 删除一些包含敏感信息的字段 unset($fields['updated']); //return $fields; return [ 'id', 'isindex', 'title', //'thumb' => 'picurl', 'thumb' => function($m){ return "http://192.168.50.222" . $m->picurl; //直接使用web接口的图片 }, 'author' =>function($m){ return $m->u->nickname; }, 'cate' => function($m){ return $m->wxcate->name; }, 'postdesc', //'content'=>'body', 'content'=>function($m){ return strip_tags($m->body); }, 'created'=>function($m){ return date("Y-m-d H:i:s", $m->created); }, ]; } }
这些都利用了另一个app 的模型和数据库。