Default Validator

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Default Validator

Сообщение slavcodev »

Этот вопрос относится и к первой версии.
Зачем он нужен, валидатор "default".
Ведь установку атрибутов по умолчанию нужно делать не во время валидации,
а чтоб эти значения были уже после создания.
Соответственно устанавливать их надо в конструкторе или методе "init()"

Ваши мысли? Может есть use cases где они нужны?
Жду Yii 3!

lynicidn
Сообщения: 2221
Зарегистрирован: 2014.05.24, 15:12

Re: Default Validator

Сообщение lynicidn »

а сценарии

Аватара пользователя
yiijeka
Сообщения: 3085
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Default Validator

Сообщение yiijeka »

я null выставляю через этот валидатор, тем атрибутам, которые DEFAULT NULL, т.к. при создании модели, если поля не заполнены в форме, то у меня в бд пишется "" - пустота, а не NULL, почему то.

Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Default Validator

Сообщение Faenir »

Да уж, немного странный валидатор, который ничего не валидирует :)
Может быть и полезен иногда, но почему это валидатор - не понятно.
Можно ведь это и в init / beforeSave / afterFind или в любом другом подходящем событии указать...

yiijeka, https://github.com/yiisoft/yii2/blob/3a ... d.php#L106

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Default Validator

Сообщение mickgeek »

yiijeka писал(а):я null выставляю через этот валидатор, тем атрибутам, которые DEFAULT NULL, т.к. при создании модели, если поля не заполнены в форме, то у меня в бд пишется "" - пустота, а не NULL, почему то.
Тут вопрос не в том, какие возможности предоставляет валидатор, а в том, что установление значения можно реализовать с помощью другого решения.

Я думаю, DefaultValueValidator, как и FilterValidator, сделан таким образом лишь для удобства, чтобы можно было использовать некоторые возможности базового класса Validator.

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Default Validator

Сообщение slavcodev »

FilterValidator - это другое, фильтрация и валидация нераздельная часть. До валидации, нам нужно значения отфильтровать и и подготовить к этой самой проверке.

А вот установка значений по умолчанию, это совсем не относится к процессу валидации. ИМХО.
Звучит странно "атрибут будет иметь значение по умолчанию если пройдет валидацию", а если не нужно запускать валидацию?

Может функционал нужный, просто название неподходящее?
Жду Yii 3!

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Default Validator

Сообщение mickgeek »

Model::init(), кстати, не очень подходящее место для этой цели. Например, если ModelSearch будет унаследована от этой модели, то для корректной работы нам так же придётся переопределять ModelSearch::init().

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Default Validator

Сообщение slavcodev »

Это вообще другая песня, PostSearch extends Post, это то что вызывает у меня очень некрасивые слова.
Жду Yii 3!

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Default Validator

Сообщение mickgeek »

slavcodev писал(а):FilterValidator - это другое, фильтрация и валидация нераздельная часть.
Я имел в виду, что FilterValidator тоже не является валидатором в принципе.

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Default Validator

Сообщение mickgeek »

slavcodev писал(а):Это вообще другая песня, PostSearch extends Post, это то что вызывает у меня очень некрасивые слова.
Согласно документации, так делать вполне нормально. А уж тем более, какой смысл дублировать атрибуты в классе, когда они уже есть в другом?

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Default Validator

Сообщение slavcodev »

mickgeek писал(а):Согласно документации, так делать вполне нормально. А уж тем более, какой смысл дублировать атрибуты в классе, когда они уже есть в другом?
Не будем об этом, ужж точно в этой теме.
Жду Yii 3!

Аватара пользователя
yiijeka
Сообщения: 3085
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Default Validator

Сообщение yiijeka »

Насчёт того, что я выставлял через него null это "не профессионально" конечно же, надо же было как то его попробовать :) На loadDefaultValues как то не обратил внимание, в своё время.

У меня вообще валидаторы trim и default вызывают непонимание, что они делают в ВАЛИДАТОРАХ, которые по сути должны только валидировать, а не изменять. Их нужно в beforeSave перенести или использовать как TimestampBehavior например. Может issue по этому поводу создать? Типа валидаторы должны проверять, а не изменять значения.

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Default Validator

Сообщение mickgeek »

yiijeka писал(а):Может issue по этому поводу создать? Типа валидаторы должны проверять, а не изменять значения.
Создатели знают об этом. В документации написано, что эти валидаторы вовсе и не валидаторы. Но можно, конечно, создать Issue для уточнения, почему так сделано.

Аватара пользователя
yiijeka
Сообщения: 3085
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Default Validator

Сообщение yiijeka »

https://github.com/yiisoft/yii2/issues/4645 поддержите кто за.

Аватара пользователя
maleks
Сообщения: 1859
Зарегистрирован: 2012.12.26, 12:56

Re: Default Validator

Сообщение maleks »

Мне наоборот не сильно нравится что например валидатор 'integer' не преобразует строку с числом (поступившим из формы) в целочисленный тип. Присваивание то в основном массовое, с атрибутами отдельно не работаем.
Yii2 universal module sceleton - for basic and advanced templates

Аватара пользователя
yiijeka
Сообщения: 3085
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Default Validator

Сообщение yiijeka »

хм, т.е. если у вас поступает из формы "2" и вы хотите, чтобы это было (int) 2 ? Зачем?

По мне так проверять (валидировать), это означает проверить и вернуть boolean результат - либо прошло проверку, либо не прошло. Если я пускаю в валидатор значение например "2.2", то жду от него boolean - false (нет это не integer) и не как не true ((int) 2) - это ломает смысл всего валидатора. А такие преобразования должен делать "конвертатор", а не валидатор.

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Default Validator

Сообщение slavcodev »

Да нет же, фильтры относятся к проверке данных (валидации), они есть везде, в ZF например. Хотя для фильтров там отдельный класс сделан и отдельная цепочка. Но она тоже срабатывает в моменнт валидации ($model->isValid()). Думаю вас смущает название, что фильтр наследует Validator, но это сделано из практических соображений, с этим просто нужно смерится, и принимать фильтры как фильтры а не валидаторы. Но убирать их в другое место не нужно. Они всегда идут совместно с валидацией. Сначал фильтруете данные, готовите к проверке и потом сразу проверяете. Отдельно делать либо фильтрацию либо валидацию, никогда не нужно.
Жду Yii 3!

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Default Validator

Сообщение slavcodev »

maleks писал(а):Мне наоборот не сильно нравится что например валидатор 'integer' не преобразует строку с числом (поступившим из формы) в целочисленный тип.
И тут все ок. Валидатор должен проверять, а не изменять значение. Хотите изменять используйте фильтры

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

['attr', 'filter', 'filter' => 'intval']
Жду Yii 3!

Аватара пользователя
yiijeka
Сообщения: 3085
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Default Validator

Сообщение yiijeka »

Это понятно, что фильтры привязаны в некотором смысле к валидации, но пихать их все вместе в rules как то путает. Было бы не плохо фильтры в одно место, валидаторы в другое. А то нужно следить, чтобы фильтры были всегда первее валидаторов.

Аватара пользователя
samdark
Администратор
Сообщения: 9294
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Default Validator

Сообщение samdark »

Иногда надо лишь после успешной валидации фильтровать. Например, прогонять текст HTMLPurifier.

Ответить