rules

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
RUvik
Сообщения: 10
Зарегистрирован: 2017.06.27, 15:14

rules

Сообщение RUvik »

Добрый день. Клиенты используют почти стандартную модель User.
class EditprofileForm extends User
Суть в том, что есть поля

Username => text disabled
Email => text disabled

Company Name => text
Company Type Id => dropbox
Telephone => text
Comment => textArea

Password Old
Password Confirm
Password Confirm2

так вот. Пытался наколдовать в rules, чтобы если старый пароль пустой, тогда никаких валидаций не происходит.

Код: Выделить всё

class EditprofileForm extends User
{
    public $username;
    public $email;
    public $password;

    public $password_old;
    public $password_confirm;
    public $password_confirm2;

    public $telephone;
    public $comment;
    public $company_name;
    public $company_type_id;



    /**
     * @inheritdoc
     */
public function rules()
    {
        return [
            ['password_old', 'findPasswords'],
            [['username', 'email'], 'safe'],
            [['password_confirm', 'password_confirm2', 'password_old'], 'string', 'min'=>6, 'when' => function($model){
                return $model->password_old != '';
            }],
            [['password_confirm'], 'compare',  'compareAttribute'=>'password_confirm2',
                'message'=> 'NEW_PASSWORD_INCORRECT WITH CONFIRM 2', 'when' => function($model){
                return $model->password_old != '';
            },],
            [['password_confirm2'], 'compare',  'compareAttribute'=>'password_confirm',
                'message'=> 'NEW_PASSWORD_INCORRECT WITH CONFIRM', 'when' => function($model){
                return $model->password_old != '';
            },

            ],
            ['telephone', 'required'],
            ['comment', 'string'],
            ['company_type_id', 'integer'],
            ['company_name', 'string'],
            ];
    }
}
    
Проблема заключается в том, что min => 6, только если хоть 1 символ введён, даже если password_old, password_confirm пустые, а в password_confirm2 поставить символ, включается валидация не меньше 6. Ну и проверка на одинаковость password_confirm и password_confirm2 работает постоянно, проверяю чтоб были одинаковыми.
А вот проверка на return $model->password_old != ''; вообще игнорируется
Возможно есть более простой метод реализации либо не надо было class EditprofileForm создавать.
Заранее всем спасибо :P
Последний раз редактировалось RUvik 2017.08.23, 10:15, всего редактировалось 2 раза.
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: rules

Сообщение kawabanga »

Есть сценарии.
RUvik
Сообщения: 10
Зарегистрирован: 2017.06.27, 15:14

Re: rules

Сообщение RUvik »

kawabanga писал(а): 2017.08.23, 10:12 Есть сценарии.
пытался использовать сценарий и добавлять
'on' => 'update',
однако суть в том, что валидация всё равно не отрабатывает.
или вы имели ввиду использовать сценарии чтоб не наследовать форму ?
WalpeR
Сообщения: 64
Зарегистрирован: 2016.08.29, 17:21

Re: rules

Сообщение WalpeR »

Я раза 4 перечитал, так и не понял что нужно автору
RUvik
Сообщения: 10
Зарегистрирован: 2017.06.27, 15:14

Re: rules

Сообщение RUvik »

WalpeR писал(а): 2017.08.23, 11:04 Я раза 4 перечитал, так и не понял что нужно автору
редактирование профиля (личного кабинета). У нас есть "инфо поля" и поля "пароль старый, новый и новый2". Хочу реализовать валидацию на проверку, если поле "пароль старый" - пустое, тогда по валидации всё гуд.
Если есть старый пароль введён.
1) минимум 6 символов.
2) Проверка на пароль из базы.
3) поля "новый пароль" и "новый пароль2" - должны быть одинаковы.
WalpeR
Сообщения: 64
Зарегистрирован: 2016.08.29, 17:21

Re: rules

Сообщение WalpeR »

Если старый пароль пустой, то без валидации? Просто в голове не укладывается. Может наоборот, нужно требовать старый пароль, если есть новый? Вот у меня так с клиентской валидацией.

Код: Выделить всё

	    ['password_new', 'trim'],
            ['password_new', 'string', 'min' => 6, 'max' => 32],
            ['password_new', 'match', 'pattern' => '/^[a-zA-Z0-9]+$/'],

            ['password_new_repeat', 'compare', 'compareAttribute' => 'password_new'],

            ['password', 'trim'],
            ['password', 'required', 'when' => function($model) {
                return ($this->user->email != $model->email || strlen($this->password_new) > 0);
            }, 'whenClient' => new JsExpression("
                function (attribute, value) {
                    var email = $('#profileform-email');
                    var pwd = $('#profileform-password_new');
                    return (email.val() != email.data('default') || pwd.val().length > 0);
                }")],
            ['password', 'validatePassword'],
Ответить