Вы можете использовать сценарии для этого:
public function rules() {
return [
[['username', 'password'], 'required', 'on' => self::SCENARIO_LOGIN],
[['username', 'password', 'password_repeat'], 'required', 'on' => self::SCENARIO_REGISTER],
[
'password_repeat', 'compare', 'compareAttribute' => 'password',
'message' => "Passwords don't match", 'on' => self::SCENARIO_REGISTER,
],
];
}
Это позволяет вам устанавливать разные правила для разных форм (разные поля требуются при входе и регистрации).
Вы можете также рассмотреть возможность создания разных моделей для разных форм с собственными rules()
, такими как LoginForm
и RegisterForm
.Это на самом деле более чистое решение и дает больше контроля.
РЕДАКТИРОВАТЬ
Для условных правил вы должны использовать when
свойство:
public function rules() {
return [
[['password', 'password_repeat'], 'string'],
[
'password_repeat', 'compare', 'compareAttribute' => 'password',
'message' => "Passwords don't match", 'skipOnEmpty' => false,
'when' => function ($model) {
return $model->password !== null && $model->password !== '';
},
],
];
}