欢迎光临
感谢一路有你

yii初体验(6)模型的简单介绍

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 
属性
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;
}




 

赞(0) 打赏
未经允许不得转载:王明昌博客 » yii初体验(6)模型的简单介绍
分享到: 更多 (0)

相关推荐

  • 暂无文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮