修改配置
修改请求配置 让 Yii 识别 json 格式 POST 数据
修改路由规则配置 让 Yii 解析 GET
POST
PUT
DELETE
请求到不同方法
GET /user
: 逐页列出所有用户; 对应index
方法POST /user
: 创建一个新用户; 对应create
方法GET /user/123
: 返回用户 123 的详细信息; 对应view
方法PUT /user/123
: 更新用户123; 对应update
方法DELETE /user/123
: 删除用户123; 对应delete
方法
'components' => [
// ...
'request' => [
// ...
'parsers' => [
'application/json' => 'yii\web\JsonParser',
'text/json' => 'yii\web\JsonParser',
],
],
// ...
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
// ...
[
'class' => 'yii\rest\UrlRule',
'controller' => [ // RSETful 控制器名
// 'user',
'api/user', // 单应用 分模块
],
'pluralize' => false, // 禁用 复数
],
// ...
],
],
// ...
],
控制器写法
<?php
namespace app\modules\api\controllers;
/**
* User
*
* @version 0.1.3
* @author 爱思路 <sc.419@qq.com>
* @link https://asilu.com/
*
* 2021-05-27 --:--
*
*/
class UserController extends \yii\rest\ActiveController
{
/**
* @var string
*/
public $modelClass = 'app\modules\api\resources\User';
}
对应资源模型
<?php
namespace app\modules\api\resources;
/**
* User fields
*
* @version 0.1.3
* @author 爱思路 <sc.419@qq.com>
* @link https://asilu.com/
*
* 2021-05-27 --:--
*
*/
class User extends \app\models\User // 继承用户模型
{
public function fields()
{
return [
'id',
'username',
'name',
'avatar',
'school_id',
'created_at',
'logged_at',
];
}
public function extraFields()
{
return [
'records',
];
}
}
数据列表 index
方法公共参数
数据搜索
如果想搜索指定数据 就需要 传输 filter
参数 用搜索指定数据
filter[name]=王家辉
查找name
为王家辉
的数据filter[name][like]=王
查找name
包含王
的数据filter[name][like]=王&filter[school_id]=1
查找name
包含王
且school_id
为1
的数据 (多个示例)filter[name][like]=王&filter[school_id]=1
查找name
包含王
且school_id
为1
的数据 (多个示例)filter[created_at][gt]=1621678757
创建时间 (int)created_at
大于1621678757
filter[created_time][>]=2021-05-27 08:00:00
创建时间 (datetime)created_time
大于2021-05-27 08:00:00
[
'not' => 'NOT',
'lt' => '<',
'gt' => '>',
'lte' => '<=',
'gte' => '>=',
'eq' => '=',
'neq' => '!=',
'in' => 'IN',
]
数据排序
如果列表数据以指定字段排序 就需要 传输 sort
参数
sort=id
按id
正序 (默认)sort=-id
按id
倒叙序sort=-id,school_id
多字段排序
指定页数
page
页数 从第 1 页开始
per-page
每页条数
fields
显示字段 如只需要显示部分字段 可以使用 如:fields=id,title
expand
附加字段 如:expand=desc,content
解析获取页码信息
// axios 为例 毕竟现在大多框架使用的都是 它
axios.get('/user')
.then(function(response) {
console.log(response.data); // 用户列表数据 相应主体数据
console.log(response.headers); // 包含 分页信息 响应头信息 x-pagination-*
/**
* response.headers['x-pagination-current-page'] 当前是第几页
* response.headers['x-pagination-page-count'] 数据总页数
* response.headers['x-pagination-total-count'] 数据总条数
* response.headers['x-pagination-per-page'] 数据分页条数
**/
});