Ninja Turtle
Ninja Turtle

Reputation: 1353

How to add custom validation function in Dynamic model in Yii2?

I am using dynamic model in my yii2 basic application.

following is code of my dynamic model.

$model = new \yii\base\DynamicModel([
        'role', 'from_rm', 'to_rm', 'user1_subdistrcts'
    ]);
    $model->addRule(['user1_subdistrcts', 'role'], 'required', ['message' => "Please select this field."])
->addRule(['from_rm'], 'checkRm');

here i am willing to user custom validation function 'checkRm' form from_rm field i have also defined checkRm function like this :

public function checkRm($from_rm, $params)
{
    $this->addError($from_rm, 'Please Select Regional Manager.');
}

But when i submit form i get error Class checkRm does not found

Now please help how to use custom validation in dynamic model.

I have also tried when and whenClient conditions but those are also not working

Upvotes: 5

Views: 4703

Answers (2)

gazorp
gazorp

Reputation: 96

Try this:

$model = new \yii\base\DynamicModel([
    'role', 'from_rm', 'to_rm', 'user1_subdistrcts'
]);
$model->addRule('from_rm', function ($attribute, $params) use ($model) {
    $model->addError($attribute, 'Please Select Regional Manager.');
});

EDIT:

Yes, it works. But if you want to test with an empty value for from_rm, you need to set skipOnEmpty to false. Example:

    $model = new \yii\base\DynamicModel([
        'role', 'from_rm', 'to_rm', 'user1_subdistrcts'
    ]);
    $model->addRule('from_rm', function ($attribute, $params) use ($model) {
        $model->addError($attribute, 'Please Select Regional Manager.');
    }, [
        'skipOnEmpty' => false,
    ]);

    $model->validate();
    var_dump($model->getErrors());

Upvotes: 1

Bizley
Bizley

Reputation: 18021

This works if checkRm is a method of DynamicModel class. So either extend DynamicModel and add this method or use closure like:

...->addRule(['from_rm'], function ($attribute, $params) {
    $this->addError($from_rm, 'Please Select Regional Manager.');
});

Upvotes: 0

Related Questions