проверка пользовательского правила не работает - Yii2

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

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

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

сценарий также объявлен на actionCreate.

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

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

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


person BlackSkull    schedule 29.09.2015    source источник
comment
Подсказка: в вашем коде есть параметр $attributes, который должен быть $attribute.   -  person robsch    schedule 29.09.2015
comment
@robsch все еще ничего, хотя. это не вызвало проверку   -  person BlackSkull    schedule 29.09.2015
comment
Ваше условие неверно! должно быть $this->password_repeat !== $this->password   -  person soju    schedule 29.09.2015


Ответы (3)


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

['password', 'compare', 'compareAttribute'=>'password_repeat',  'message' => 'Your error message'],
person vishuB    schedule 29.09.2015
comment
могу ли я использовать это с валидатором when? Я все еще недоволен compare валидатором. @бвп - person BlackSkull; 29.09.2015
comment
вы просто используете свой сценарий в файле контроллера - person vishuB; 29.09.2015
comment
$model-›scenario = 'создать'; - person vishuB; 29.09.2015
comment
$model= new Users(['scenario' => 'create']); это код в моем контроллере - person BlackSkull; 29.09.2015

В вашем коде.

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

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

public function checkPassword($attributes, $params)

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

person Sergio Rosales    schedule 23.10.2015

Попытайся

<?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?>
person Drunk Penguin    schedule 15.03.2017