2015-09-29 3 views
1

вы можете помочь мне с этим? Я прочитал документ, но правило все еще не работает. Я сделал это неправильно? Я все еще искал несколько примеров, но ничего не случилось. Я хочу проверить пароль пользователя и repeat_password, если они совпадают.нестандартное правило проверка не работает-Yii2

это мой код в модели. , что два объявлены как требуемые тоже по этому сценарию.

[['password','password_repeat'], 'checkPassword', 'on'=>'create'], 

сценарий объявлен в действииСоздать тоже.

public function checkPassword($attributes, $params) 
    { 
     if(!$this->password_repeat === $this->password) 
     { 
      $this->addError($attribute, 'Passwords do not match!'); 
     } 
    } 

я попробовать использовать compare проверку на что два поля, но это не удовлетворит меня. Если вы сравниваете только одно поле, оно не будет проверять другое поле. если вы подтвердите их оба, существует вероятность того, что они сравнивают друг друга, когда вы удаляете то, что вы ввели на одном из двух полей. Поэтому я хочу создать тот, который даже вы удаляете то, что вы ввели в эти два поля, кто идет первым или нет, они будут проверены. Извините за беспокойство. Надеюсь, вы все равно получите то, что я хочу. Благодарю.

PS, я не хочу использовать виджет для проверки пароля (?). Спасибо.

+0

Подсказка: в коде у вас есть параметр '$ attributes', который должен быть' $ attribute'. – robsch

+0

@robsch все еще ничего, tho. он не вызвал валидацию – BlackSkull

+1

Неправильное состояние! это должно быть '$ this-> password_repeat! == $ this-> password' – soju

ответ

2

Вы просто использовать этот Validation в вашем model файл как ...

['password', 'compare', 'compareAttribute'=>'password_repeat', 'message' => 'Your error message'], 
+0

Могу ли я использовать это с помощью' when' validator? Я до сих пор не удовлетворен валидатором 'compare'. @bvp – BlackSkull

+0

вы просто используете свой сценарий в файле контроллера – vishuB

+0

$ model-> scene = 'create'; – vishuB

0

В вашем коде.

$this->addError($attribute, 'Passwords do not match!'); 

Проверьте свой атрибут varname $, его не существует в объявлении функции.

public function checkPassword($attributes, $params) 

AddError не может назначить ошибку в поле формы.

0

Попробуй

<?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?> 
Смежные вопросы