我有以下规则让电子邮件在模式中是唯一的
[['email'], 'unique'],
我没有使用ajax 提交表单。问题是我收到了除唯一规则之外的所有规则验证消息。
那么如何让唯一规则在客户端起作用呢?
我错过了什么?请帮忙
我有以下规则让电子邮件在模式中是唯一的
[['email'], 'unique'],
我没有使用ajax 提交表单。问题是我收到了除唯一规则之外的所有规则验证消息。
那么如何让唯一规则在客户端起作用呢?
我错过了什么?请帮忙
唯一的方法是enableAjaxValidation
在客户端
要为单个输入字段启用 AJAX 验证,请将该字段的 enableAjaxValidation 属性配置为 true 并指定唯一的表单 ID:
use yii\widgets\ActiveForm;
$form = ActiveForm::begin([
'id' => 'registration-form',
]);
echo $form->field($model, 'username', ['enableAjaxValidation' => true]);
// ...
ActiveForm::end();
您还需要准备服务器,以便它可以处理 AJAX 验证请求。这可以通过控制器操作中的如下代码片段来实现:
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
不幸的是,这必须来自 DB 的 ActiveRecordSet 的更新,当它意识到该字段是唯一的时。最简单的方法是检查 ($model->save()) 是否为真,否则返回/返回表单,您将看到一个框架消息,表明特定字段已被占用。