Yii2—模型(Model)

模型(Model)

本部分将包含如下这方面的内容
  • 模型的定义
  • 属性
    • 属性的定义
    • 属性的访问
    • 属性的批量读取和赋值
    • 属性标签
  • 场景
  • 验证
    • 验证规则的实现
    • 自定义验证器和内置验证器
    • 条件验证
    • 验证规则和批量赋值
Yii中的模型有以下基本特征:  
  • 属性声明:可以在模型里面定义自己需要的属性。
  • 属性标签:每个属性都有一个对应的标签以便在界面上显示友好的名称
  • 批量属性赋值:可以一次为模型的多个属性赋值。
  • 基于场景的数据验证功能。

1、模型的定义

一般在定义模型的时候都继承自 yii\base\Model 或者 yii\db\ActiveRecord
  1. class Post extends \yii\base\Model
  2. {
  3.     .....
  4. }
2、属性

1、属性的定义

一般情况下,在模型里面定义的属性是公共的并且是非静态的。在下面的示例中,LoginForm模型类声明了两个属性:用户名和密码。
  1. // LoginForm has two attributes: username and password
  2. class LoginForm extends \yii\base\Model
  3. {
  4.     public $username;
  5.     public $password;
  6. }
另外还可以用其它的方式来声明属性:通过覆盖的attributes()方法。例如, yii\db\ActiveRecord里面定义的属性是使用的相关联的数据表的列名称。

2、属性的访问
模型的属性可以像访问对象的成员变量一样来访问。例如,一篇文章模型可能包含一个标题属性和内容属性,可以如下:
  1. $post = new Post();
  2. $post->title = 'Hello, world';
  3. $post->content = 'Something interesting is happening.';
  4. echo $post->title;
  5. echo $post->content;
由于模型实现了ArrayAccess接口,所以也可以用数组的方式来访问:
  1. $post = new Post();
  2. $post['title'] = 'Hello, world';
  3. $post['content'] = 'Something interesting is happening';
  4. echo $post['title'];
  5. echo $post['content'];
3、属性批量读取和赋值

如果要一次获取模型的所有的属性,可用通过 attributes 属性来得到,下面的例子将得到post模型里面所有的属性,并以name-value的数组形式返回
  1. $post = Post::findOne(42);
  2. if ($post) {
  3.     $attributes = $post->attributes;
  4.     var_dump($attributes);
  5. }
同理,也可以用attributes来进行批量赋值。
  1. $post = new Post();
  2. $attributes = [
  3.     'title' => 'Massive assignment example',
  4.     'content' => 'Never allow assigning attributes that are not meant to be assigned.',
  5. ];
  6. $post->attributes = $attributes;
  7. var_dump($post->attributes);
在批量获取一个模型的属性的值的时候不用考虑属性的名称,可直接返回模型的所有的属性的名称和对应的值。而在批量赋值的时候就不一样了,只有数组中的key(属性名称)是安全( safe)的情况下才会赋值成功,否则将不会赋值。

4、属性标签

一般情况下在模型里面定义的属性都需要在前台界面显示出来,这个时候有一个对应的友好的文字提示就好了。属性标签就是用来干这个的。

在模型里面定义属性标签很简单,只需要重写 yii\base\Model::attributeLabels() 方法即可,它返回的是name-value数组,名称为属性的名称,对应的值即为属性的标签名称。
  1. // LoginForm has two attributes: username and password
  2. class LoginForm extends \yii\base\Model
  3. {
  4.     public $usern
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值