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

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

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

Сообщение BrusSENS » 2018.01.31, 22:57

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 » 2018.01.31, 23:14

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

Аватара пользователя
chungachguk
Сообщения: 392
Зарегистрирован: 2012.07.17, 11:52

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

Сообщение chungachguk » 2018.02.01, 05:24

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

Аватара пользователя
S c
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение 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 в разных языках содержат встроенную валидацию. Плюсы её - я так же уже описал

Аватара пользователя
S c
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение 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 пустые\не переопределять?

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin » 2018.02.01, 11:17

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 » 2018.02.01, 11:20

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
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c » 2018.02.01, 11:55

но я стою на позиции, что валидация снаружи еще лучше.
конечно лучше, кто спорит :) и реализовать это самому довольно просто. я топлю за то, чтоб саму встроенную валидацию с AR не убирать. кому её достаточно - пусть использует её, без вынесенного валидатора

Аватара пользователя
S c
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c » 2018.02.01, 11:57

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 » 2018.02.01, 11:58

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

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin » 2018.02.01, 11:59

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
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c » 2018.02.01, 12:30

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

Аватара пользователя
S c
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c » 2018.02.01, 12:37

ну как варик, если исспользуем внешний валидатор - то и значения сами присваиваем. нужна прост реализация setAttributes - которая не будет учитывать "безопастные" аттрибуты. Ведь мы сами валидируем, значит в модель приходят уже валидные данные. Получаем вариант load() + rules() из коробки для простых случаев (уже реализовано), и setAttributes() (присваивающий все данные без проверок) и свой валидатор (не реализовано).

Аватара пользователя
S c
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c » 2018.02.01, 12:40

Можно совместно попытаться замутить pull request для 2го варианта. Правда у меня почти 0 опыта в публикации оупен сорца, не потяну сам. Продумаем как будет выглядеть Validator изнутри (как снаружи с ним работать - zelenin уже нормальный пример привёл), и с setAttributes() тоже подумать нужно

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

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

Сообщение ElisDN » 2018.02.01, 12:42

Вызывайте $model->setAttributes($attrs, false) с флагом false. Тогда rules() учитываться не будут.

Аватара пользователя
S c
Сообщения: 864
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c » 2018.02.01, 16:09

Это само собой, но выше уже писали что использовать везде save(false) и тд - на костыли похоже.

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

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

Сообщение samdark » 2018.02.02, 20:18

Я верно понял, что позыв выпилить валидацию из AR вызван исключительно тем, что в неё технически можно напихать слишком много, слишком сложно и так, чтобы при возникновении ещё одного bounded context было плохо?

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

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

Сообщение BrusSENS » 2018.02.04, 20:13

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

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

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

Сообщение samdark » 2018.02.04, 22:25

 Почему отчасти? Что я упустил?

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

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

Сообщение BrusSENS » 2018.02.05, 01:43

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

Ответить