2.1 Убить валидацию и фильтры в AR

Уже исправленные репорты или принятые предложения
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение BrusSENS »

S c писал(а): 2018.01.31, 22:47 сорри, оффтоп: Как вы отдельные куски мои цитируете, с ником?)
Всё просто) Кнопка цитаты + ручки)
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение zelenin »

S c писал(а): 2018.01.31, 22:40 Так о чем речь то? есть же валидатор от model/form, используйте его. используйте его отдельно, исспользуя AR rules()
а AR все равно будет валидировать. а мне надо отменить одно правило в модели, а другое изменить. save(false)? неконсистентно. код превратится в лапшу своих валидаторов и save(false). Может лучше в одном месте валидировать без костылей?
Аватара пользователя
chungachguk
Сообщения: 435
Зарегистрирован: 2012.07.17, 11:52

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение chungachguk »

Какой год только и разговоров, что о валидации в модели, которая не модель. Уже давно бы выпилили её за ненадобностью. Мне кажется Зеленин прав, единственная валидация, которую можно было оставить в AR это проверка соответствия введённых данных с полями БД: строка, не пустая, 12 символов и т.п., всё.
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

BrusSENS писал(а): 2018.01.31, 22:57
S c писал(а): 2018.01.31, 22:40 Так о чем речь то? есть же валидатор от model/form, используйте его. используйте его отдельно, исспользуя AR rules()

Речь о том что бы убить\убрать\вынести validate() в AR (который полезен). Этого делать не стоит.
Добавить новый сервис Validator - та без проблем. Хоть в рамках yii, хоть самому у себя в проекте.

как доработать? убрать удобный функционал? вынести его?
Убрать его из AR в угоду строгости. Часто встречаются проекты, где от этого приходится избавляться, хотя тем, кто это писал понравилось. Просто же. Yii многое позволяет делать, с этим и есть предложение бороться. PHP и веб девелоп вырос и накладывает определенные рамки на разработчика. Пора и Yii внести строгости.
Тем не менее - выше привел пример, популярные реализации AR в разных языках содержат встроенную валидацию. Плюсы её - я так же уже описал
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

zelenin писал(а): 2018.01.31, 23:14
S c писал(а): 2018.01.31, 22:40 Так о чем речь то? есть же валидатор от model/form, используйте его. используйте его отдельно, исспользуя AR rules()
а AR все равно будет валидировать. а мне надо отменить одно правило в модели, а другое изменить. save(false)? неконсистентно. код превратится в лапшу своих валидаторов и save(false). Может лучше в одном месте валидировать без костылей?
а если rules пустые\не переопределять?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение zelenin »

S c писал(а): 2018.02.01, 11:13
BrusSENS писал(а): 2018.01.31, 22:57
S c писал(а): 2018.01.31, 22:40 Так о чем речь то? есть же валидатор от model/form, используйте его. используйте его отдельно, исспользуя AR rules()

Речь о том что бы убить\убрать\вынести validate() в AR (который полезен). Этого делать не стоит.
Добавить новый сервис Validator - та без проблем. Хоть в рамках yii, хоть самому у себя в проекте.

как доработать? убрать удобный функционал? вынести его?
Убрать его из AR в угоду строгости. Часто встречаются проекты, где от этого приходится избавляться, хотя тем, кто это писал понравилось. Просто же. Yii многое позволяет делать, с этим и есть предложение бороться. PHP и веб девелоп вырос и накладывает определенные рамки на разработчика. Пора и Yii внести строгости.
Тем не менее - выше привел пример, популярные реализации AR в разных языках содержат встроенную валидацию. Плюсы её - я так же уже описал
а я спросил "мысль-то поясните. Что означает по вашему традиционное наличие валидации внутри модели?". Вы не объяснили, что это значит, и плюсов в конце концов не привели. То есть вы высказали позицию, что валидация внутри - это хорошо (ок, я согласен), но я стою на позиции, что валидация снаружи еще лучше.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение zelenin »

S c писал(а): 2018.02.01, 11:13
zelenin писал(а): 2018.01.31, 23:14
S c писал(а): 2018.01.31, 22:40 Так о чем речь то? есть же валидатор от model/form, используйте его. используйте его отдельно, исспользуя AR rules()
а AR все равно будет валидировать. а мне надо отменить одно правило в модели, а другое изменить. save(false)? неконсистентно. код превратится в лапшу своих валидаторов и save(false). Может лучше в одном месте валидировать без костылей?
а если rules пустые\не переопределять?
пустые? load не будет работать? в целом это предложение закостылить, а не отрефакторить.
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

но я стою на позиции, что валидация снаружи еще лучше.
конечно лучше, кто спорит :) и реализовать это самому довольно просто. я топлю за то, чтоб саму встроенную валидацию с AR не убирать. кому её достаточно - пусть использует её, без вынесенного валидатора
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

zelenin писал(а): 2018.02.01, 11:20
S c писал(а): 2018.02.01, 11:13
zelenin писал(а): 2018.01.31, 23:14 а AR все равно будет валидировать. а мне надо отменить одно правило в модели, а другое изменить. save(false)? неконсистентно. код превратится в лапшу своих валидаторов и save(false). Может лучше в одном месте валидировать без костылей?
а если rules пустые\не переопределять?
пустые? load не будет работать? в целом это предложение закостылить, а не отрефакторить.
почему не будет? уже точно не помню что там внутри, давно с yii плотно не приходилось работать.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение zelenin »

S c писал(а): 2018.02.01, 11:55
но я стою на позиции, что валидация снаружи еще лучше.
конечно лучше, кто спорит :) и реализовать это самому довольно просто. я топлю за то, чтоб саму встроенную валидацию с AR не убирать. кому её достаточно - пусть использует её, без вынесенного валидатора
это хорошо, ты прав. но как это реализовать без костылей? если никак, то надо выпиливать. Логично?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение zelenin »

S c писал(а): 2018.02.01, 11:57
zelenin писал(а): 2018.02.01, 11:20
S c писал(а): 2018.02.01, 11:13

а если rules пустые\не переопределять?
пустые? load не будет работать? в целом это предложение закостылить, а не отрефакторить.
почему не будет? уже точно не помню что там внутри, давно с yii плотно не приходилось работать.
насколько помню лоадятся только описанные в правилах атрибуты.
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

точно, совсем забыл. посоветовал бы не исспользовать load() - но я сам в данном случае поддерживаю именно простейший вариант, чуть ли не крудом сгенерированный, буду себе противоречить :)
ну вот тут конечно соглашусь, по минимуму бы хотяб продумать, чтоб для определенных нужнд можно было вообще не исспользовать AR валидацию. Правда и внешний валидатор не даст load() методу отработать, в любом случае править AR нужно из ядра
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

ну как варик, если исспользуем внешний валидатор - то и значения сами присваиваем. нужна прост реализация setAttributes - которая не будет учитывать "безопастные" аттрибуты. Ведь мы сами валидируем, значит в модель приходят уже валидные данные. Получаем вариант load() + rules() из коробки для простых случаев (уже реализовано), и setAttributes() (присваивающий все данные без проверок) и свой валидатор (не реализовано).
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

Можно совместно попытаться замутить pull request для 2го варианта. Правда у меня почти 0 опыта в публикации оупен сорца, не потяну сам. Продумаем как будет выглядеть Validator изнутри (как снаружи с ним работать - zelenin уже нормальный пример привёл), и с setAttributes() тоже подумать нужно
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение ElisDN »

Вызывайте $model->setAttributes($attrs, false) с флагом false. Тогда rules() учитываться не будут.
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение S c »

Это само собой, но выше уже писали что использовать везде save(false) и тд - на костыли похоже.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение samdark »

Я верно понял, что позыв выпилить валидацию из AR вызван исключительно тем, что в неё технически можно напихать слишком много, слишком сложно и так, чтобы при возникновении ещё одного bounded context было плохо?
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение BrusSENS »

samdark писал(а): 2018.02.02, 20:18 Я верно понял, что позыв выпилить валидацию из AR вызван исключительно тем, что в неё технически можно напихать слишком много, слишком сложно
Отчасти да.
samdark писал(а): 2018.02.02, 20:18 и так, чтобы при возникновении ещё одного bounded context было плохо?
Если Вы имеете ввиду текущую реализацию со сценариями - да.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение samdark »

 Почему отчасти? Что я упустил?
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: 2.1 Убить валидацию и фильтры в AR

Сообщение BrusSENS »

samdark писал(а): 2018.02.04, 22:25  Почему отчасти? Что я упустил?
Потому что таким образом мы ещё можем сделать более строгие рамки для разработчиков, тем самым внеся некоторые стандарты не позволяя делать как захочется. Есть объект, обрабатывающий пришедшие данные из Request и есть непосредственно объект, который работает в БД. Со сценариями, фильтрами и валидацией я уже как то столкнулся в чужом проекте. Отладка превратилась в сущий ад. А не было бы возможности сделать такое - и работать с таким проектом стало бы уже полегче.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Ответить