Ich habe ein Newsletter-Formular abonniert und versuche eine Fehlermeldung anzuzeigen, wenn die E-Mail bereits in der Datenbank existiert. Hier ist der Code von Subscriber-Modell Subscriber.phpYii2 überprüfen, ob die E-Mail bereits in der Datenbank existiert
<?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.'
]
];
}
}
?>
-Controller Aktion:
public function actionSubscriber()
{
$subscriber_model = new Subscriber();
$request = Yii::$app->request;
if($request->isAjax && $subscriber_model->load($request->post())){
$subscriber_model->save();
}
}
Code anzeigen:
<?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);
?>
Die aktuelle Code-Show "leere E-Mail" und "ungültige E-Mail" -Nachricht, aber die Validierung schlägt fehl einzigartige E-Mail. Bitte sagen Sie mir, was das Problem in meinem Code ist.
Ich denke [this] (http://stackoverflow.com/questions/41205936/yii2-unique-validator-ignored) sollte Ihnen helfen – gmc
Es würde die 'Diese E-Mail-Adresse wurde bereits vergeben.'-Nachricht nach dem Einreichen zurückgeben die Form. Ja, Sie müssen eine AJAX-Anforderung implementieren, die Sie während der Formularvalidierung überprüfen müssen. Es würde jedoch immer noch fehlschlagen, wenn Sie auf "Senden" klicken. –
Bitte zeigen Sie uns Ihre Aktionsfunktion in Ihrem Controller. –