如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
属性 yii\base\Model::attributes() 指定模型所拥有的属性 $model = new \app\models\ContactForm; // "name" 是ContactForm模型的属性 $model->name = 'example'; echo $model->name; use yii\base\Model; class ContactForm extends Model{ public $name; public $email; public $subject; public $body; } yii\db\ActiveRecord 返回对应数据表列名作为它的属性名 yii\base\Model::getAttributeLabel() 获取属性的标签 例如: $model = new \app\models\ContactForm; // 显示为 "Name" echo $model->getAttributeLabel('name'); 模型使用 yii\base\Model::scenario 属性保持使用场景的跟踪 // 场景作为属性来设置 $model = new User; $model->scenario = 'login'; // 场景通过构造初始化配置来设置 $model = new User(['scenario' => 'login']); 验证场景yii\base\Model::scenarios()方法来自定义行为 验证规则: https://www.yiichina.com/doc/guide/2.0/structure-models#validation-rules use yii\db\ActiveRecord; class User extends ActiveRecord{ public function scenarios() { return [ 'login' => ['username', 'password'], 'register' => ['username', 'email', 'password'], ]; } } 你想在默认场景外使用新场景 use yii\db\ActiveRecord; class User extends ActiveRecord{ public function scenarios() { $scenarios = parent::scenarios(); $scenarios['login'] = ['username', 'password']; $scenarios['register'] = ['username', 'email', 'password']; return $scenarios; } } 验证规则 验证输入:https://www.yiichina.com/doc/guide/2.0/input-validation $model = new \app\models\ContactForm; // 用户输入数据赋值到模型属性 $model->attributes = \Yii::$app->request->post('ContactForm'); if ($model->validate()) { // 所有输入数据都有效 all inputs are valid } else { // 验证失败:$errors 是一个包含错误信息的数组 $errors = $model->errors; } public function rules() { return [ // name, email, subject 和 body 属性必须有值 [['name', 'email', 'subject', 'body'], 'required'], // email 属性必须是一个有效的电子邮箱地址 ['email', 'email'], ]; } 一条规则只在某个 场景 下应用,为此你可以指定规则的 on 属性 [['username', 'email', 'password'], 'required', 'on' => 'register'], 块赋值 块赋值只用一行代码将用户所有输入填充到一个模型 将终端用户输入的表单数据赋值到 ContactForm 模型的属性 $model = new \app\models\ContactForm; $model->attributes = \Yii::$app->request->post('ContactForm'); 等价于 $model = new \app\models\ContactForm; $data = \Yii::$app->request->post('ContactForm', []); $model->name = isset($data['name']) ? $data['name'] : null; $model->email = isset($data['email']) ? $data['email'] : null; $model->subject = isset($data['subject']) ? $data['subject'] : null; $model->body = isset($data['body']) ? $data['body'] : null; 安全属性 块赋值只应用在模型当前yii\base\Model::scenario场景yii\base\Model::scenarios()方法 列出的称之为 安全属性 的属性上 public function scenarios() { return [ 'login' => ['username', 'password'], 'register' => ['username', 'email', 'password'], ]; } 默认yii\base\Model::scenarios()的实现会返回yii\base\Model::rules()所有属性和数据, 如果不覆盖这个方法,表示所有只要出现在活动验证规则中的属性都是安全的。 提供一个特别的别名为 safe 的验证器来申明哪些属性是安全的不需要被验证, 如下示例的规则申明 title 和 description都为安全属性。 public function rules() { return [ [['title', 'description'], 'safe'], ]; } 非安全属性 在scenarios()方法中属性名加一个惊叹号 ! public function scenarios() { return [ 'login' => ['username', 'password', '!secret'], ]; } 数据导出 第一步,模型转换成数组; 第二步,数组转换成所需要的格式。 模型转数组 yii\base\Model::attributes yii\base\Model::toArray() $post = \app\models\Post::findOne(100); $array = $post->attributes; 字段 fields() 方法定义的字段是默认字段 extraFields()方法定义额外可用字段 $array = $model->toArray([], ['prettyName', 'fullAddress']); fields() 来增加、删除、重命名和重定义字段,fields() 方法返回值应为数组 // 明确列出每个字段,特别用于你想确保数据表或模型属性改变不会导致你的字段改变(保证后端的API兼容). public function fields() { return [ // 字段名和属性名相同 'id', // 字段名为 "email",对应属性名为 "email_address" 'email' => 'email_address', // 字段名为 "name", 值通过PHP代码返回 'name' => function () { return $this->first_name . ' ' . $this->last_name; }, ]; } // 过滤掉一些字段,特别用于你想继承父类实现并不想用一些敏感字段 public function fields() { $fields = parent::fields(); // 去掉一些包含敏感信息的字段 unset($fields['auth_key'], $fields['password_hash'], $fields['password_reset_token']); return $fields; } |