Yii2 required validation on update

2019-02-17 09:23发布

问题:

I've Yii2 form containing form fields depending on action of page. Ex. Few fields appears when then action is create and few appears when action is update. I want to add required validation based on this scenario.

Ex.

<?= $form->field($model, 'unique_identifier')->textInput(['maxlength' => 45]) ?>

I am showing this field only when action => 'update'.

Now I want to add required validation for this and I tried this:

[['unique_identifier'], 'required', 'on' => 'update'],

But above validation not working. If I remove on=>update then its validating on both create and update scenario.

Any help would be appreciated.

回答1:

ActiveRecord does not set scenario automaticaly when you update or create items. You must override update() method in your model and set scenario that you need. E.g. in your case

public function update($runValidation = true, $attributeNames = null)
{
    $this->scenario = 'update';
    return parent::update($runValidation, $attributeNames);
}

Also you can set scenario in your actionUpdate

public function actionUpdate($id)
{
    $model = $this->findModel($id);
    $model->scenario = 'update';
    //load data from request, save model etc.
 }