Не рабоате валидатор

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Chelobaka
Сообщения: 202
Зарегистрирован: 2018.06.01, 09:54

Не рабоате валидатор

Сообщение Chelobaka » 2019.10.16, 14:02

Здравствуйте,

box_id инициируется при создании формы. Но валидатор не срабатывает. Задача отключить данную проверку если id записи с данными полями равны $this->box_id. В списке запросов этого тоже нет.

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

[['name', 'owner_id'], 'unique', 'targetClass' => Box::class, 'filter' => ['!=', 'id', $this->box_id]],

yiiliveext
Сообщения: 499
Зарегистрирован: 2019.08.13, 01:49

Re: Не рабоате валидатор

Сообщение yiiliveext » 2019.10.16, 16:25

И не будет. Валидаторы подгружаются в методе load() при получении safe атрибутов еще до того как данные post запроса будут загружены в модель.

Аватара пользователя
Chelobaka
Сообщения: 202
Зарегистрирован: 2018.06.01, 09:54

Re: Не рабоате валидатор

Сообщение Chelobaka » 2019.10.16, 16:29

yiiliveext писал(а):
2019.10.16, 16:25
И не будет. Валидаторы подгружаются в методе load() при получении safe атрибутов еще до того как данные post запроса будут загружены в модель.
Разве не должен сработать filter, т.к. данный параметр устанавливается при инициализации формы?

yiiliveext
Сообщения: 499
Зарегистрирован: 2019.08.13, 01:49

Re: Не рабоате валидатор

Сообщение yiiliveext » 2019.10.16, 16:33

Chelobaka писал(а):
2019.10.16, 16:29
yiiliveext писал(а):
2019.10.16, 16:25
И не будет. Валидаторы подгружаются в методе load() при получении safe атрибутов еще до того как данные post запроса будут загружены в модель.
Разве не должен сработать filter, т.к. данный параметр устанавливается при инициализации формы?
Он сработает, но $this->box_id будет равен null
Чтобы заработало, переопределите метод getValidators в вашей модели так

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

public function getValidators()
{
    return $this->createValidators();
}

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Не рабоате валидатор

Сообщение ElisDN » 2019.10.16, 19:59

Замените на анонимку:

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

..., 'targetClass' => Box::class, 'filter' => function (ActiveQuery $query) {
    $query->andWhere(['!=', 'id', $this->box_id]]);
}

Ответить