Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 480
Ninja Turtle Avatar asked Nov 09 '22 07:11

Ninja Turtle


1 Answers

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());
like image 87
gazorp Avatar answered Nov 14 '22 21:11

gazorp