Yii2 - 实施方案

时间:2017-02-10 13:08:09

标签: yii yii2 yii2-basic-app

我对Yii Scenario有一些疑问 (这个概念对我来说很新鲜

如果我的Post课程延伸Model 并具有以下属性

public $id;
public $title;
public $body;

CONST SCENARIO_SAVE = 'save';
CONST SCENARIO_UPDATE = 'update';

// Code 1
public function rules() {
    return [
            ['id', 'integer'],
            [['title', 'body'], 'string'],
            [['id', 'title', 'body'], 'required']
    ];
}

public function scenarios()
{
    return [
        self::SCENARIO_SAVE => ['id', 'title', 'body'],
        self::SCENARIO_UPDATE => ['title', 'body']
    ];
}

相同
// Code 2
return [
        ['id', 'integer'],
        [['title', 'body'], 'string'],
        [['id', 'title', 'body'], 'required', 'on' => 'save'],
        [['title', 'body'], 'required', 'on' => 'update']
];

代码1和2是一回事吗?

'id', 'title', ‘body’是否可以安全地为这两个代码分配质量,还是应该为代码1指定“安全”规则?

1 个答案:

答案 0 :(得分:1)

代码1 代码2 不一样。 您需要为每个方案指定所有安全属性

> `// Code 1
public function rules() {
    return [
            ['id', 'integer'],
            [['title', 'body'], 'string'],
            [['id', 'title', 'body'], 'required']
    ];
}`

对于代码1 在创建和更新操作期间,将需要所有三个属性id, title, body

> `// Code 2
return [
        ['id', 'integer'],
        [['title', 'body'], 'string'],
        [['id', 'title', 'body'], 'required', 'on' => 'save'],
        [['title', 'body'], 'required', 'on' => 'update']
];`

如果您使用id, title, body

将模型方案设置为save,则需要代码2 $model->scenario='save';

当需要$model->scenario='update'titlebody时。

以下是我们如何设置模型场景的示例。假设Post类。

public function actionMyAction(){
    $model = new Post;
    $model->scenario = 'save';//changing the scenario which you want to use

    if ($model->load(\Yii::$app->request->post())){
       // the rest of your code here....

        if($model->save(true,$this->scenario)){
          //return true if all the attributes passed the validation rules
        } 
    }
}

以下是一些可以帮助您开始使用场景

的其他链接

http://www.yiiframework.com/doc-2.0/yii-base-model.html#scenarios%28%29-detail http://www.bsourcecode.com/yiiframework2/yii2-0-scenarios/