2016-10-22 82 views
4

我在我的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条件,但这些也没有工作

回答

0

这个工作,如果checkRmDynamicModel类的方法。因此,要么延长DynamicModel,并添加此方法或关闭,如:

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

试过这种..不工作 –

1

试试这个:

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

喜mat0ng谢谢您的回答..但它也没有工作对我来说..你试过了吗? –