- 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://127.0.0.1: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://127.0.0.1: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 - 内部服务器错误。