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

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

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

Сообщение Chelobaka »

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

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

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

[['name', 'owner_id'], 'unique', 'targetClass' => Box::class, 'filter' => ['!=', 'id', $this->box_id]],
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

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

Сообщение yiiliveext »

И не будет. Валидаторы подгружаются в методе load() при получении safe атрибутов еще до того как данные post запроса будут загружены в модель.
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

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

Сообщение Chelobaka »

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

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

Сообщение yiiliveext »

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
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

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

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

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