Yii2:ajax表单验证ajax提交表单
我想知道任何Yii2专家可以帮助我了解如何最好地使用ajax形式和Yii ajax验证.我想我可以解释这个问题,而不会让你完成我的所有代码.
我正在使用Promo Code输入表单,用户将其促销代码输入表单,表单通过ajax提交.然后,我们对促销代码细节执行数据库查找,验证代码,如果代码验证,我们要显示隐藏在页面上的注册表单. 我有一个表单字段“代码”的自定义验证功能,它是名为“寄存器”的模型场景中的活动字段. class UserCode extends ActiveRecord { ... public function scenarios() { return [ 'register' => ['code'],]; } public function rules() { return [ [['code'],'required'],[['code'],'validateUserCode','on' => ['register']],]; } public function validateUserCode($attribute,$params) { // perform all my custom logic to determine if the code is valid if ($code_invalid) { $this->addError($attribute,'Sorry,this code is invalid.'); } } ... } 然后在控制器中,如Yii2指南所示,我使用以下代码来捕获这个ajax验证: public function actionValidate() { $model = new UserCode(['scenario' => 'register']); if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { Yii::$app->response->format = Response::FORMAT_JSON; return ActiveForm::validate($model); } // no logic can be run after the above code b/c the form is submit with ajax // and therefore always trapped in the Yii::$app->request->isAjax conditional } 上面的代码都可以正常工作,如果我从我的表单上的$form->字段($model,’code’)字段中删除焦点,Yii的ajax验证将基于我的自定义验证逻辑,并显示我的自定义错误消息. 当我去提交表格时,我的挑战就出现了.表单提交也通过ajax处理,因此控制器动作总是返回ActiveForm :: validate($model)的结果;因为if(Yii :: $app-> request-> isAjax&&$model-> load(Yii :: $app-> request-> post()))将适用于ajax表单验证和表单提交. 使用上述方法,我被迫返回只有ajax验证的结果,而不是我可能需要额外的客户端验证的任何json数据,例如在通过ajax表单提交有效的使用代码之后显示注册表单. 我意识到我可以设置’enableAjaxValidation’=>在ActiveForm中为false,然后在if(Yii :: $app-> request-> isAjax& $model-> load(Yii :: $app-> request->请求中)中返回自己的json数据; post()))条件.如果我这样做,我可以显示注册表单,因为我有我自己的json数据来处理. 有没有办法在用ajax提交的表单上进行ajax验证?您如何分别从ajax表单提交中捕获ajax验证,以不同的方式处理这两个事件? 任何建议或替代方法都非常感激!
您应该使用不同的URL设置validationUrl与您将表单提交到的URL相比.这样,您可以使用验证函数来验证并返回ActiveForm :: validate($model);和正常的提交表单做其他事情.
您可以阅读有关validationUrl here的更多信息: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |