模型(Model)
本部分将包含如下这方面的内容
1、模型的定义
一般在定义模型的时候都继承自 yii\base\Model 或者 yii\db\ActiveRecord。
2、属性
1、属性的定义
一般情况下,在模型里面定义的属性是公共的并且是非静态的。在下面的示例中,LoginForm模型类声明了两个属性:用户名和密码。
另外还可以用其它的方式来声明属性:通过覆盖的attributes()方法。例如,
yii\db\ActiveRecord里面定义的属性是使用的相关联的数据表的列名称。
2、属性的访问
模型的属性可以像访问对象的成员变量一样来访问。例如,一篇文章模型可能包含一个标题属性和内容属性,可以如下:
由于模型实现了ArrayAccess接口,所以也可以用数组的方式来访问:
3、属性批量读取和赋值
如果要一次获取模型的所有的属性,可用通过 attributes 属性来得到,下面的例子将得到post模型里面所有的属性,并以name-value的数组形式返回
同理,也可以用attributes来进行批量赋值。
在批量获取一个模型的属性的值的时候不用考虑属性的名称,可直接返回模型的所有的属性的名称和对应的值。而在批量赋值的时候就不一样了,只有数组中的key(属性名称)是安全(
safe)的情况下才会赋值成功,否则将不会赋值。
4、属性标签
一般情况下在模型里面定义的属性都需要在前台界面显示出来,这个时候有一个对应的友好的文字提示就好了。属性标签就是用来干这个的。
在模型里面定义属性标签很简单,只需要重写 yii\base\Model::attributeLabels() 方法即可,它返回的是name-value数组,名称为属性的名称,对应的值即为属性的标签名称。
本部分将包含如下这方面的内容
- 模型的定义
- 属性
- 属性的定义
- 属性的访问
- 属性的批量读取和赋值
- 属性标签
- 场景
- 验证
- 验证规则的实现
- 自定义验证器和内置验证器
- 条件验证
- 验证规则和批量赋值
- 属性声明:可以在模型里面定义自己需要的属性。
- 属性标签:每个属性都有一个对应的标签以便在界面上显示友好的名称
- 批量属性赋值:可以一次为模型的多个属性赋值。
- 基于场景的数据验证功能。
1、模型的定义
一般在定义模型的时候都继承自 yii\base\Model 或者 yii\db\ActiveRecord。
- class Post extends \yii\base\Model
- {
- .....
- }
1、属性的定义
一般情况下,在模型里面定义的属性是公共的并且是非静态的。在下面的示例中,LoginForm模型类声明了两个属性:用户名和密码。
- // LoginForm has two attributes: username and password
- class LoginForm extends \yii\base\Model
- {
- public $username;
- public $password;
- }
2、属性的访问
模型的属性可以像访问对象的成员变量一样来访问。例如,一篇文章模型可能包含一个标题属性和内容属性,可以如下:
- $post = new Post();
- $post->title = 'Hello, world';
- $post->content = 'Something interesting is happening.';
- echo $post->title;
- echo $post->content;
- $post = new Post();
- $post['title'] = 'Hello, world';
- $post['content'] = 'Something interesting is happening';
- echo $post['title'];
- echo $post['content'];
如果要一次获取模型的所有的属性,可用通过 attributes 属性来得到,下面的例子将得到post模型里面所有的属性,并以name-value的数组形式返回
- $post = Post::findOne(42);
- if ($post) {
- $attributes = $post->attributes;
- var_dump($attributes);
- }
- $post = new Post();
- $attributes = [
- 'title' => 'Massive assignment example',
- 'content' => 'Never allow assigning attributes that are not meant to be assigned.',
- ];
- $post->attributes = $attributes;
- var_dump($post->attributes);
4、属性标签
一般情况下在模型里面定义的属性都需要在前台界面显示出来,这个时候有一个对应的友好的文字提示就好了。属性标签就是用来干这个的。
在模型里面定义属性标签很简单,只需要重写 yii\base\Model::attributeLabels() 方法即可,它返回的是name-value数组,名称为属性的名称,对应的值即为属性的标签名称。
- // LoginForm has two attributes: username and password
- class LoginForm extends \yii\base\Model
- {
- public $usern