Yii - 字段

  • 简述

    通过覆盖fields() 和 extraFields()方法,您可以定义可以将哪些数据放入响应中。这两种方法的区别在于前者定义了默认的字段集,应包含在响应中,而后者定义了附加字段,如果最终用户通过扩展查询参数请求它们,则可以将其包含在响应中.
    第 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 中,运行 URLhttp://localhost: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',
             ];
          }
       } 
    ?>
    
    请注意,电子邮件字段由extraFields()方法返回。
    第 4 步- 要使用此字段获取数据,请运行http://localhost:8080/users?expand=email
    获取数据
  • 自定义操作

    yii\rest\ActiveController类提供以下操作-
    • Index - 逐页列出资源
    • View - 返回指定资源的详细信息
    • Create - 创建一个新资源
    • update- 更新现有资源
    • Delete - 删除指定的资源
    • option- 返回支持的 HTTP 方法
    所有上述动作都在动作方法()中声明。
    要禁用“删除”和“创建”操作,请以这种方式修改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 - 好的。
    • 201 - 成功创建资源以响应 POST 请求。Location 标头包含指向新创建资源的 URL。
    • 204 - 请求已成功处理,响应不包含任何内容。
    • 304 - 资源未修改。
    • 400 - 错误请求。
    • 401 - 身份验证失败。
    • 403 - 不允许经过身份验证的用户访问指定的 API 端点。
    • 404 - 资源不存在。
    • 405 - 不允许的方法。
    • 415 - 不支持的媒体类型。
    • 422 - 数据验证失败。
    • 429 - 请求太多。
    • 500 - 内部服务器错误。