我对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指定“安全”规则?
答案 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'
,title
和body
时。
以下是我们如何设置模型场景的示例。假设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/