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.
Yii Framework 2 : Update Query. You can use different type of methods to update the database records in yii2.0 framework. You can use model methods, execute() etc. save() OR update() Using model methods, You can load existing record and update the necessary changes in that.
Note: The yii\base\Validator::skipOnEmpty property is used for yii\base\Model validation only. Using it without a model has no effect. If you need to perform multiple validations against several values, you can use yii\base\DynamicModel which supports declaring both attributes and rules on the fly.
Since Yii2 version 2.0.4 there is the EachValidator used to validate each item in an array. The ['integer'] part can be every other validator object that Yii2 offers and can hold the specific arguments for the validator. Like: ['integer', 'min' => 1337].
Its usage is like the following: The yii\base\DynamicModel::validateData () method creates an instance of DynamicModel, defines the attributes using the given data ( name and email in this example), and then calls yii\base\Model::validate () with the given rules.
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.
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With