yii rest
环境搭建
phpstorm + phpstudy +xdebug
下载安装
REST
拷贝一个新的后台目录, 设置config/main.php
中的id和控制器命名空间
return [
'id' => 'app-api',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'api\controllers',
'bootstrap' => ['log'],
'modules' => [],
设置url美化规则
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => true,
'rules' => [
[
'class'=>'yii\rest\UrlRule',
'controller' => 'xxx',
]
],
],
在main-local.php
中设置json解析器
$config = [
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'fyw98YxydBk1tupwR89ghKaQvBnz0uRo',
'parsers' => [
'application/json'=>'yii\web\JsonParse',
]
],
],
];
修改nginx配置文件或者apache配置文件
控制器
继承 ActiveController
use yii\data\ActiveDataProvider;
use yii\rest\ActiveController;
class ArticleController extends ActiveController
{
public $modelClass = 'common\models\Article';
}
字段获取
url附加fields参数
重写fields方法
在fields方法中通过匿名函数自定义字段的值
通过重写extrafields方法来忽略某些字段
分页
use yii\data\ActiveDataProvider;
use yii\rest\ActiveController;
class ArticleController extends ActiveController
{
public $modelClass = 'common\models\Article';
public function actions()
{
$actions = parent::actions();
unset($actions['index']);
return $actions;
}
function actionIndex(){
$modelClass = $this->modelClass;
return new ActiveDataProvider([
'query'=>$modelClass::find()->asArray(),
'pagination' => ['pageSize'=>5],
]);
}
}
访问 http://apitpl.com/articles?page=2
搜索
在控制器中添加方法
function actionSearch()
{
return $this->modelClass::find()->where(['like', 'title', $_POST['keyword']])->all();
}
修改配置文件
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => 'article',
'extraPatterns' => [
'POST search'=>'search',
]
],
],
],
访问路径 http://apitpl.com/articles/search
, post方式
body: keyword=''
自定义资源
继承 Controller
, 不是 ActiveController
top10
use common\models\Article;
use yii\db\Query;
use yii\rest\ActiveController;
use yii\rest\Controller;
class TopController extends Controller
{
public function actionIndex()
{
$all = Article::find()
->select([
'序号' => 'article.id',
'标题' => 'article.title',
'状态' => 'article.status',
'作者' => 'user.username'])
->leftjoin('user', 'user.id=article.created_by')
->orderBy('序号 desc')
->limit(5)
->asArray();
// echo $all->createCommand()->getRawSql() . "\n";
// $all = (new Query())
// ->select(['article.id', 'article.title', 'user.username'])
// ->from(['article', 'user'])
// ->where('article.created_by=user.id')
// ->orderBy('article.id desc')
// ->limit(5);
//
// echo $all->createCommand()->getRawSql() . "\n";
return $all->all();
}
}
如果函数不返回数据,而sql语句可以出数据,就调用
asArray()
方法