gpt4 book ai didi

ajax - Yii2:ajax 提交表单上的 ajax 表单验证

转载 作者:行者123 更新时间:2023-12-04 01:44:22 30 4
gpt4 key购买 nike

我想知道是否有 Yii2 专家可以帮助我了解如何最好地使用 ajax 表单与 Yii ajax 验证相结合。我想我可以在不带您阅读我所有代码的情况下解释这个问题。

我正在处理一个促销代码输入表单,用户将他们的促销代码输入到表单中,该表单是通过 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.');
}
}

...
}

然后在 Controller 中,正如 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->field($model, 'code') 中移除焦点在我的表单上的字段中,Yii 的 ajax 验证开始并根据我的自定义验证逻辑显示我的自定义错误消息。

当我去提交表格时,我的挑战就出现了。表单提交也是通过ajax处理的,因此 Controller Action 总是返回 ActiveForm::validate($model);的结果因为 if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post()))将同时应用于 ajax 表单验证和表单提交。

使用上述方法,我被迫只返回 ajax 验证的结果,而不返回任何我可能需要进行额外客户端验证的 json 数据,例如在通过 ajax 表单提交有效使用代码后显示注册表。

我意识到我可以设置 'enableAjaxValidation' => false在 ActiveForm 上,然后在 if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) 中返回我自己的 json 数据条件。如果我这样做,我就可以显示注册表,因为我有自己的 json 数据可以使用。

有没有办法对使用 ajax 提交的表单进行 ajax 验证?您如何将 ajax 验证与 ajax 表单提交分开,以不同的方式处理这两个事件?

非常感谢任何建议或替代方法!

最佳答案

您应该设置 validationUrl使用与您提交表单的 URL 不同的 URL。通过这种方式,您可以使用验证函数来验证并返回 return ActiveForm::validate($model);以及执行其他操作的正常提交表单。

您可以阅读更多关于 validationUrl 的信息here :

关于ajax - Yii2:ajax 提交表单上的 ajax 表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28954523/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com