我在我的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());
如果checkRm
是DynamicModel
类的方法,则此操作有效。所以要么扩展DynamicModel
并添加这个方法,要么使用闭包,如:
...->addRule(['from_rm'], function ($attribute, $params) {
$this->addError($from_rm, 'Please Select Regional Manager.');
});