ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> yii\\base\\Model::fields() 默认返回模型的所有属性作为字段, yii\\db\\ActiveRecord::fields() 只返回和数据表关联的属性作为字段。 可覆盖 fields() 方法来增加、删除、重命名、重定义字段,fields() 的返回值应为数组,数组的键为字段名 数组的值为对应的字段定义,可为属性名或返回对应的字段值的匿名函数,特殊情况下,如果字段名和属性名相同, 可省略数组的键,例如 ~~~ // 明确列出每个字段,适用于你希望数据表或模型属性修改时不导致你的字段修改(保持后端API兼容性) public function fields() { return [ // 字段名和属性名相同 'id', // 字段名为"email", 对应的属性名为"email_address" 'email' => 'email_address', // 字段名为"name", 值由一个PHP回调函数定义 'name' => function ($model) { return $model->first_name . ' ' . $model->last_name; }, ]; } // 过滤掉一些字段,适用于你希望继承父类实现同时你想屏蔽掉一些敏感字段 public function fields() { $fields = parent::fields(); // 删除一些包含敏感信息的字段 unset($fields['auth_key'], $fields['password_hash'], $fields['password_reset_token']); return $fields; } // 如果只想修改某一个字段 public function fields() { $fields = parent::fields(); $fields['name'] = function ($model) { return $model->name . ' a' . $model->name; }; return $fields; } ~~~ 可以用toArray看下 ~~~ $res = Yii::$app->request->post(); $obj = new EntryForm(); $obj->attributes = $res; var_dump($obj->toArray()); ~~~ 不显示数据表中的 password 和 role 字段信息: ~~~ public function fields(){ $fields = parent::fields(); unset($fields['password'],$fields['role']); return $fields; } ~~~ 显示除了fields()方法默认限制的字段外,其他的字段信息: ~~~ public function fields(){ $fields = parent::fields(); unset($fields['password'],$fields['role']); return $fields; } public function extraFields(){ return ['role']; } ~~~ 显示user类的所有默认字段(fields限制的部分): ~~~ http://demo.com/V1/user ~~~ 显示fields中允许显示的部分字段信息: ~~~ http://demo.com/V1/user?fields=username,role ~~~ 显示除fields限制外,extraFields中允许显示的信息: ~~~ http://demo.com/V1/user?fields=username&expand=role http://demo.com/V1/user?expand=role ~~~