在 控制器中,常用的几行代码
<?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 的模型和数据库。