我订阅了一个通讯表单,如果电子邮件已存在于数据库中,我试图显示一条错误消息。下面是用户模型Subscriber.phpYii2检查数据库中是否已存在电子邮件
<?php
namespace common\models;
use yii\db\ActiveRecord;
class Subscriber extends ActiveRecord
{
public static function tableName()
{
return 'subscriber';
}
public function rules()
{
return [
['email', 'filter', 'filter' => 'trim'],
['email', 'required'],
['email', 'email'],
[
'email', 'unique',
'message' => 'This email address has already been taken.'
]
];
}
}
?>
控制器行动代码:
public function actionSubscriber()
{
$subscriber_model = new Subscriber();
$request = Yii::$app->request;
if($request->isAjax && $subscriber_model->load($request->post())){
$subscriber_model->save();
}
}
查看代码:
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\helpers\Url;
?>
<h3>Subscribe to Newsletter</h3>
<?php $form = ActiveForm::begin(['id' => $subscriber_model->formName(), 'action' => ['project/subscriber'], 'enableAjaxValidation' => true]); ?>
<div class="input-group">
<?= $form->field($subscriber_model, 'email')->textInput()->label(false); ?>
<span class="input-group-btn">
<?php echo Html::submitButton('Sign Up', ['class' => 'btn btn-primary subscribe-btn']); ?>
</span>
</div>
<?php ActiveForm::end(); ?>
<?php
$script = <<< JS
$('#{$subscriber_model->formName()}').on('beforeSubmit', function(e){
var form = $(this);
$.post(
form.attr("action"),
form.serialize()
).done(function(data){
form.trigger("reset");
});
return false;
});
JS;
$this->registerJs($script);
?>
当前的代码显示 “空的电子邮件”和“无效的电子邮件”消息,但验证失败独特的电邮。请告诉我在我的代码中有什么问题。
我认为[this](http://stackoverflow.com/questions/41205936/yii2-unique-validator-ignored)应该可以帮到你 – gmc
它会在提交后返回'此电子邮件地址已被采取.'消息表格。是的,您需要实施AJAX请求以在表单验证期间进行检查。但是,点击提交后,它仍然会失败。 –
请向我们展示您的控制器中的动作功能。 –