我的Yii2表单包含表单字段,具体取决于页面的操作。防爆。如果操作为create
,则会显示很少的字段,而当操作为update
时,则会显示很少的字段。我想根据这种情况添加所需的验证。
实施例
<?= $form->field($model, 'unique_identifier')->textInput(['maxlength' => 45]) ?>
我只在action => 'update'
时显示此字段。
现在我想为此添加必要的验证,我尝试了这个:
[['unique_identifier'], 'required', 'on' => 'update'],
但以上验证无效。如果我删除了on=>update
,那么它会在创建和更新方案中进行验证。
任何帮助都将不胜感激。
答案 0 :(得分:10)
ActiveRecord 不会自动设置方案。您必须覆盖模型中的update()
方法并设置所需的方案。例如。在你的情况下
public function update($runValidation = true, $attributeNames = null)
{
$this->scenario = 'update';
return parent::update($runValidation, $attributeNames);
}
您也可以在actionUpdate
public function actionUpdate($id)
{
$model = $this->findModel($id);
$model->scenario = 'update';
//load data from request, save model etc.
}