php – 如何在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没有找到

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

我也尝试过when和whenClient条件,但那些也不起作用

最佳答案 试试这个:

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