- Yii 教程
- Yii - 首页
- Yii - 概述
- Yii - 安装
- Yii - 创建页面
- Yii - 应用程序结构
- Yii - 入口脚本
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用操作
- Yii - 模型
- Yii - 小部件
- Yii - 模块
- Yii - 视图
- Yii - 布局
- Yii - 资源
- Yii - 资源转换
- Yii - 扩展
- Yii - 创建扩展
- Yii - HTTP 请求
- Yii - 响应
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 规则
- Yii - HTML 表单
- Yii - 验证
- Yii - 特设验证
- Yii - AJAX 验证
- Yii - 会话
- Yii - 使用闪存数据
- Yii - Cookie
- Yii - 使用 Cookie
- Yii - 文件上传
- Yii - 格式化
- Yii - 分页
- Yii - 排序
- Yii - 属性
- Yii - 数据提供者
- Yii - 数据小部件
- Yii - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 创建事件
- Yii - 行为
- Yii - 创建行为
- Yii - 配置
- Yii - 依赖注入
- Yii - 数据库访问
- Yii - 数据访问对象
- Yii - 查询生成器
- Yii - Active Record
- Yii - 数据库迁移
- Yii - 主题
- Yii - RESTful API
- Yii - RESTful API 实战
- Yii - 字段
- Yii - 测试
- Yii - 缓存
- Yii - 碎片缓存
- Yii - 别名
- Yii - 日志记录
- Yii - 错误处理
- Yii - 认证
- Yii - 授权
- Yii - 本地化
- Yii - Gii
- Gii – 创建模型
- Gii – 生成控制器
- Gii – 生成模块
- Yii 有用资源
- Yii - 快速指南
- Yii - 有用资源
- Yii - 讨论
Yii - 字段
通过覆盖fields() 和 extraFields() 方法,您可以定义哪些数据可以放入响应中。这两种方法之间的区别在于,前者定义了默认字段集,这些字段集应包含在响应中,而后者定义了其他字段,如果最终用户通过expand 查询参数请求这些字段,则可以将这些字段包含在响应中。
步骤 1 - 以这种方式修改MyUser 模型。
<?php
namespace app\models;
use app\components\UppercaseBehavior;
use Yii;
/**
* This is the model class for table "user".
*@property integer $id
* @property string $name
* @property string $email
*/
class MyUser extends \yii\db\ActiveRecord {
public function fields() {
return [
'id',
'name',
//PHP callback
'datetime' => function($model) {
return date("d:m:Y H:i:s");
}
];
}
/**
* @inheritdoc
*/
public static function tableName() {
return 'user';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['name', 'email'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'name' => 'Name',
'email' => 'Email',
];
}
}
?>
除了默认字段:id 和 name 之外,我们还添加了一个自定义字段 - datetime。
步骤 2 - 在 Postman 中,运行 URL https://:8080/users。
步骤 3 - 现在,以这种方式修改MyUser 模型。
<?php
namespace app\models;
use app\components\UppercaseBehavior;
use Yii;
/**
* This is the model class for table "user".
*
* @property integer $id
* @property string $name
* @property string $email
*/
class MyUser extends \yii\db\ActiveRecord {
public function fields() {
return [
'id',
'name',
];
}
public function extraFields() {
return ['email'];
}
/**
* @inheritdoc
*/
public static function tableName() {
return 'user';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['name', 'email'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'name' => 'Name',
'email' => 'Email',
];
}
}
?>
请注意,email 字段由extraFields() 方法返回。
步骤 4 - 要获取包含此字段的数据,请运行https://:8080/users?expand=email。
自定义操作
yii\rest\ActiveController 类提供以下操作 -
Index - 分页列出资源
View - 返回指定资源的详细信息
Create - 创建新的资源
Update - 更新现有资源
Delete - 删除指定资源
Options - 返回支持的 HTTP 方法
所有上述操作都在 actions 方法() 中声明。
要禁用“delete”和“create”操作,请以这种方式修改UserController -
<?php
namespace app\controllers;
use yii\rest\ActiveController;
class UserController extends ActiveController {
public $modelClass = 'app\models\MyUser';
public function actions() {
$actions = parent::actions();
// disable the "delete" and "create" actions
unset($actions['delete'], $actions['create']);
return $actions;
}
}
?>
处理错误
在获取 RESTful API 请求时,如果请求中存在错误或服务器上发生意外情况,您可以简单地抛出异常。如果您可以识别错误的原因,则应抛出异常以及相应的 HTTP 状态代码。Yii REST 使用以下状态 -
200 - OK。
201 - 响应 POST 请求成功创建了资源。Location 标头包含指向新创建资源的 URL。
204 - 请求已成功处理,响应不包含内容。
304 - 资源未修改。
400 - 错误请求。
401 - 身份验证失败。
403 - 已认证的用户无权访问指定的 API 端点。
404 - 资源不存在。
405 - 方法不允许。
415 - 不支持的媒体类型。
422 - 数据验证失败。
429 - 请求过多。
500 - 内部服务器错误。