如何在动态模型中添加自定义验证函数


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

我在我的yii2基本应用程序中使用动态模型。

下面是我的动态模型代码。

$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');

这里我愿意用户自定义验证函数'checkRm'形式的from_rm字段,我也定义了checkRm函数这样:

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

但是当我提交表单时,我得到错误类checkRm没有找到

现在请帮助如何在动态模型中使用自定义验证。

我也尝试了whenwhenClient条件,但这些也不工作

试试这个:

$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.');
});
编辑:

是的,它有效。但是,如果您想用from_rm的空值进行测试,则需要将skipOnEmpty设置为false。例子:

    $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());

如果checkRmDynamicModel类的方法,则此操作有效。所以要么扩展DynamicModel并添加这个方法,要么使用闭包,如:

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