5

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

Ninja Turtle
  • 1,293
  • 2
  • 24
  • 50

2 Answers2

1

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());
gazorp
  • 76
  • 3
0

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.');
});
Bizley
  • 17,392
  • 5
  • 49
  • 59