2016-05-23 12 views
-1

Tipps: Benutzername und E-Mail wird von AjaxValidation mit validate-Methode überprüft.Captcha nicht validieren in yii2

alles ist korrekt, aber ich denke, Captcha ist im Server geändert, aber das alte Bild ist im Client.

ich googeln viel kein Ergebnis gefunden.

diese Ansicht:

<?php 
    $form = \yii\widgets\ActiveForm::begin([ 
       'id' => 'form-signup', 
       'action' => 'signup', 
       'enableAjaxValidation' => false, 
       'enableClientValidation' => true, 
       'validationUrl' => 'validation', 
       'validateOnBlur' => true, 
       'fieldConfig' => [ 
        'template' => '<div class="col-md-4" >{label}{input}{error}</div>' 
       ] 
    ]); 
    ?> 

    <?= $form->field($signup, 'username', ['enableAjaxValidation' => true]) ?> 
    <?= $form->field($signup, 'name') ?> 
    <?= $form->field($signup, 'family') ?> 
    <?= $form->field($signup, 'mobile') ?> 
    <?= $form->field($signup, 'password')->passwordInput() ?> 
    <?= $form->field($signup, 'password_repeat')->passwordInput() ?> 
    <?= $form->field($signup, 'email', ['enableAjaxValidation' => true]) ?> 
    <?= $form->field($signup, 'verifyCode', ['enableAjaxValidation' => false])->widget(yii\captcha\Captcha::className()) ?> 
    <div class="form-group"> 
     <?= yii\helpers\Html::submitButton('signup', ['class' => 'btn btn-green margin-right', 'name' => 'signup-button']) ?> 

    </div> 

Controller:

 $model = new SignupForm(); 
    if ($model->load(Yii::$app->request->post())) { 
     if ($model->validate()) { 
      if ($user = $model->signup()) { 
       if (Yii::$app->getUser()->login($user)) { 
        return $this->goHome(); 
       } 
      } 
     } else { 
    ; 
      \yii\widgets\ActiveForm::validate($model); 
     } 
    } else { 
     return $this->render('/partials/_signup', ['signup' => $model]); 
    } 

ajax Validation Controller Methode:

public function actionValidation() { 
    $model = new SignupForm(); 
    if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { 
     Yii::$app->response->format = 'json'; 
     return \yii\widgets\ActiveForm::validate($model); 
    } 
} 

Modell:

public $name; 
public $family; 
public $mobile; 
public $username; 
public $email; 
public $password; 
public $password_repeat; 
public $verifyCode; 

    public function rules() { 
    return [ 
     [['name', 'family', 'mobile'], 'default'], 
     ['name', 'string', 'max' => 50], 
     ['family', 'string', 'max' => 50], 
     ['mobile', 'string', 'max' => 11], 
     ['username', 'filter', 'filter' => 'trim'], 
     ['username', 'required'], 
     ['username', 'string', 'min' => 2, 'max' => 255], 
     [['username'], 'unique', 'targetClass' => '\frontend\models\User', 'message' => 'username already taken.'], 
     ['email', 'filter', 'filter' => 'trim'], 
     ['email', 'required'], 
     ['email', 'email'], 
     ['email', 'string', 'max' => 255], 
     ['email', 'unique', 'targetClass' => '\frontend\models\User', 'message' => 'email name already taken.'], 
     ['password', 'required'], 
     ['password', 'string', 'min' => 6, 'max' => 255], 
     ['password_repeat', 'string', 'min' => 6, 'max' => 255], 
     ['password_repeat', 'compare', 'compareAttribute' => 'password'], 
     ['verifyCode', 'captcha'], 
    ]; 
} 

kein Verhalten in der Steuerung ist

Antwort

0
  1. enableAjaxValidation einer Form Vorrang vor, dass eines Feldes nimmt, so ist es schwer zu sagen, was genau Sie mit Ihrem aktuellen Einstellungen versuchen Sie zu tun
  2. Stellen Sie sicher, Haben Sie verifyCode als ein Attribut in Ihrem Modell
  3. Captcha Verifikationscode wird in der Sitzung gespeichert. Der Sitzungsschlüssel ist eine Kombination aus IDs des Controllers und der Aktion. Möglicherweise haben Sie also eine falsch konfigurierte Sitzung. Oder der Captcha-Aktionsname ist nicht "Captcha", - Sie haben diesen Teil Ihres Quellcodes in der Frage nicht gefunden.