2015-03-11 3 views
11

Я написал правила в модели как:Повторить пароль не работает в Yii2

public $password_repeat; 

/** 
* @inheritdoc 
*/ 
public function rules() 
{ 
    return [ 
     .... 
     .... 
     ['password', 'required'], 
     ['password', 'string', 'min' => 6], 
     ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match" ], 
    ]; 
} 

Если я использую другой пароль в Password и Password Repeat поле, он дает ошибку. Значит, это работает. Но проблема в том, что она не дает никакой ошибки, если поле Password Repeat пусто.

+1

Необходимо указать требуемый пароль повторения, например ['password_repeat', 'required'], – MKD

ответ

22

Добавьте обязательный тег для password_repeat. Ниже

return [ 
     .... 
     ['password', 'required'], 
     ['password', 'string', 'min' => 6], 
     ['password_repeat', 'required'], 
     ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match" ], 
    ]; 
+0

Нам не нужно использовать 'required' в' Yii.1. * '. Можете ли вы рассказать мне, почему мы должны использовать его в 'Yii2'? – StreetCoder

+0

Yii и Yii2 имеют много недокументированных различий из-за того, что yii2 строится независимо от нуля. Это всего лишь один из них. – arkoak

+0

ладно спасибо :). Я получил его – StreetCoder

8

Другой подход установить переменную $ skipOnEmpty к ложным:

return [ 
.... 
    ['password', 'required'], 
    ['password', 'string', 'min' => 6], 
    ['password_repeat', 'compare', 'compareAttribute'=>'password', 'skipOnEmpty' => false, 'message'=>"Passwords don't match"], 
]; 

Это имеет преимущество, что позволяет сделать только поле повтора пароля требуется, если пароль имеет значение в нем слишком.

+0

блестящий - спасибо. Для других, кто пытается это сделать, вам нужно добавить общедоступную переменную в модель, иначе форма объявит ошибку. I.e .: public $ password_repeat – DrBorrow

Смежные вопросы