YIIyii初体验(6)模型的简单介绍属性 yii\base\Model::attributes() 指定模型所拥有的属性 $model = new \app\models\ContactForm; // "name" 是ContactForm模型的属性 $model->name = 'example'; echo $model->name; use yii\base\Model; class作者王明昌发布时间2019-08-23复制属性 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; }
2019-08-24yii初体验(7-15)yii初体验(7)视图 yii初体验(8)模块 yii初体验(9) 小部件widgets yii初体验(10) 前端资源 yii初体验(11) 请求处理 yii初体验(12)数据库访问 yii初体验(
2019-08-23yii初体验(4)数据库初体验初体验 链接数据库,并显示数据,修改数据 Yii::$app->db 实战代码 调取数据库信息,显示在页面上,并使用分页小部件 model controller view 浏览器显示效果 代码可以在
2019-08-22yii初体验(1)composer安装+环境检测首先要安装好composer,我们这里使用composer安装 执行如下代码,创建basic项目 composer create-project --prefer-dist --stability=d
2019-08-23yii初体验(5)控制器 操作的简单介绍控制器 ControllerID/ActionID ModuleID/ControllerID/ActionID(属于模块下的控制器) 控制器ID应仅包含英文小写字母、数字、下划线、中横杠和正斜杠 a
2019-08-22yii初体验(3)表单提交初体验 model层 控制层调用 浏览器显示信息: 实战 http://yiitest:7888/index.php?r=site/entry 方法 view 视图使用了一个功能强大的小部件 yii\
2019-08-22yii初体验(2)创建方法创建方法 访问地址: http://yiitest:7888/index.php?r=site/say 创建视图 方法中使用 return $this->render('say', ['message