2016-04-08 4 views
2

У меня есть мой метод правила, как это:Сравните правило yii2 не работает правильно

public function rules() 
{ 
    return [ 
     [['username', 'email', 'password'],'filter', 'filter' => 'trim'], 
     [['username', 'email', 'password'],'required', 'message' => '{attribute} can not be empty'], 
     ['username', 'string', 'min' => 2, 'max' => 255], 
     ['password', 'string', 'min' => 6, 'max' => 255], 
     ['password_repeat', 'required', 'message' => 'This field can not be empty'], 
     ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match", 'skipOnError' => true], 
     ['username', 'unique', 
      'targetClass' => User::className(), 
      'message' => 'This name is already used.'], 
     ['email', 'email'], 
     ['email', 'unique', 
      'targetClass' => User::className(), 
      'message' => 'This name is already used.'], 
    ]; 
} 

И мой взгляд код выглядит так:

<?php $form = ActiveForm::begin(['action' => 'login/register']); ?> 
     <?= $form->field($registration, 'username', 
      ['template' => '<div class="uk-form-row"> 
           {input}{error} 
           </div>']) 
      ->textInput(['id' => 'register_username', 'class' => 'md-input']) ?> 

     <?= $form->field($registration, 'password', 
      ['template' => '<div class="uk-form-row"> 
          {input}{error} 
          </div>']) 
      ->passwordInput(['id' => 'register_password', 'class' => 'md-input']) ?> 

     <?= $form->field($registration, 'password_repeat', 
      ['template' => '<div class="uk-form-row"> 
          {input}{error} 
          </div>']) 
      ->passwordInput(['id' => 'register_password_repeat', 'class' => 'md-input']) ?> 

     <?= $form->field($registration, 'email', 
      ['template' => '<div class="uk-form-row"> 
          {input}{error} 
          </div>']) 
      ->textInput(['id' => 'register_email', 'class' => 'md-input']) ?> 
     <div class="uk-margin-medium-top"> 
      <button class="md-btn md-btn-primary md-btn-block md-btn-large">Sign in</button> 
     </div> 
     <?php ActiveForm::end(); ?> 

Когда я заполняю все данные поля ввода имеют ошибку Passwords don't match при повторном пароле, даже если это правильно в первый раз. Есть ли что-то с моими правилами проверки или это ошибка в Yii Validator?

UPD: Я пробовал 'skipOnError' => true. Я нашел это ответом на аналогичный вопрос, но он все еще не работает, как и ожидалось.

UPD: Я сделал некоторые проверки в моей консоли:

var a = $('#register_password') 
undefined 
a.val() 
"Halloha" 
var b = $('#register_password_repeat') 
undefined 
b.val() 
"Halloha" 

Но он по-прежнему показывает сообщение Passwords don't match ошибки

+0

ли что-то происходит с ними в 'beforeValidate()'? Также, если у вас нет этого, добавьте это действие и «var_dump» оба атрибута модели, чтобы увидеть, действительно ли они не совпадают. В Yii2 нет ошибки в проверке, это что-то еще. – peaceman

+0

@peaceman Я не создавал метод 'beforeValidate()'. Хорошо, но как я могу получить значения «vad_dump», если они не были отправлены на бэкэнд (кнопка «Отправить» ничего не делает). –

ответ

0

Попробуйте избежать идентификатора при вводе пароля (идентификатор автоматически генерируются yii2)

<?= $form->field($registration, 'password', 
     ['template' => '<div class="uk-form-row"> 
         {input}{error} 
         </div>']) 
     ->passwordInput(['class' => 'md-input']) ?> 

<?= $form->field($registration, 'password_repeat', 
     ['template' => '<div class="uk-form-row"> 
         {input}{error} 
         </div>']) 
     ->passwordInput([ 'class' => 'md-input']) ?> 
+0

В начале я пробовал весь этот код без 'skipOnError'. Весь следующий код, предоставленный вами, похоже на то, что у меня есть сейчас. Не так ли? –

+0

Да .. Мое предположение также основано на требуемом пароле. – scaisEdge

+0

Я думаю, вы предложили что-то, что у меня было: '[['username', 'email', 'password'], 'required', 'message' => '{attribute} не может быть пустым'],' –

2

попробовать с помощью правила, как этот

// validates if the value of "password" attribute equals to that of 
['password', 'compare', 'message'=>"Passwords don't match"], 

автоматически сравнивает значение пароля с атрибутом password_repeat вместо того, чтобы делать это в другом порядке, как описано в документации.

http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html#compare

+0

Был ли полезен ответ? – Midhun