我正在尝试为yii2中的模型编写一些自定义验证,但我无法弄清楚为什么验证始终是正面的,尽管我的验证函数总是会添加错误。 例如规则
public function rules()
{
return [
...
[['myattribute'], 'myvalidation'],
];
}
public function myvalidation($attribute, $params)
{
$this->addError($attribute, "error");
}
validate()函数仍然返回true。有什么问题?
答案 0 :(得分:0)
在验证规则中添加skipOnError =>假
[
['myattribute', 'myvalidation', 'skipOnError' => false],
]
然后
$model->validate(); // should return false;
答案 1 :(得分:0)
我建议你注意这个lesson on custom roles和 read docs就可以了。它不是最好的视频教程,但这个人让它正常工作。
在你的情况下:
1.在[['myattribute'], 'myvalidation'],
中从此处删除额外数组,使您的模型规则和自定义数值函数看起来像这样
public function rules()
{
return [
...
['myattribute', 'myvalidation'],
];
}
public function myvalidation($attribute, $params)
{
$this->addError($attribute, "error");
}
没错,但是当你有多个属性时就会使用它。
2.然后转到你的表单并将``放到你的ActiveForm中,这样看起来就像这样
<?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?>
我的意思是,如果你想在不重新加载的情况下验证它(使用ajax),你需要这样做。
3.另外将此添加到控制器与视图相关联的操作
if(Yii::$app->request->isAjax && $model->load($_POST)) {
Yii::$app->response->format = 'json';
return \yii\widgets\ActiveForm::validate($model);
}
这将通过ajax验证您在表单中的输入,如果它不是ajax,则无效。
答案 2 :(得分:0)
['reg_date','validateDate', 'skipOnEmpty' => false, 'skipOnError' => false]
将此添加到您的规则
public function validateDate($attribute,$params,$validator)
{
$validator->addError($this,$attribute,"Bugungi sana bo'lishi kerak!");
}
像这样在您的控制器端进行检查
if($model->validate()){
echo "validate works";
}