yii model的rules具有很强大的验证功能,当我们使用Yii的ActiveForm组件时它会自动生成对应js验证代码,对数据进行验证,但是当我们在rules中写自定义验证时,就只有在表单提交后才会验证,这样对用户来说是很不友好的,所以此时我们可以使用ajax验证,具体代码如下:
在model中写我们的自定义验证规则
public function rules()
{
return [
[[‘uuid‘, ‘single_dog‘, ‘name‘], ‘required‘],
[[‘wife_name‘,‘son_name‘], ‘singleDogVerify‘,‘skipOnEmpty‘ => false, ‘skipOnError‘ => false],
];
}
/*
* 验证是否单身
*/
public function singleDogVerify($attribute) {
if (!$this->single_dog){
if (strlen($this->$attribute)==0){
$name = $this->getAttributeLabel($attribute);
$this->addError($attribute, $name.‘不能为空‘);
}
}
}
在上述代码中single_dog字段对应form中的一个单选框,值为1代表单身狗,值为0代表已婚,当已婚时wife_name是必填的
在ActiveForm中做如下修改
<?php $form = ActiveForm::begin([
‘enableAjaxValidation‘ => true,
‘validationUrl‘ => ‘validate‘,//这里是ajax验证请求的控制器action
]); ?>
在控制器中完善验证方法如下:
/*
* ajax验证
*/
public function actionValidate(){
$model = new ModelName();
$postData = Yii::$app->request->post();
if (Yii::$app->request->isAjax && $model ->load($postData)) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$result = \yii\bootstrap\ActiveForm::validate($model );
return $result;
}
}
这样就可以做到文本框失去焦点时进行自定义验证
原文:https://www.cnblogs.com/night-bright/p/12485733.html