@symfony_php

Страница 474 из 1418
Sergey
11.12.2017
11:19:16
http://wiki.c2.com/?DataTransferObject

там даже с вариантами что можно вместо юзать

Konstantin
11.12.2017
11:20:11
а почему я, к примеру не могу от клиента просто реквест провалидировать ?

и сразу в энтити запхать

Google
Sergey
11.12.2017
11:20:30
почему не можешь? можешь)

я так и делаю (в апишках)

Konstantin
11.12.2017
11:20:52
ну и спрашивается зачем тогда это в ДТО запихивать ?

Sergey
11.12.2017
11:20:56
но сразу в энтити запхать ты можешь только если тебе плевать на целостность данных и бизнес ограничений нет никаких

Konstantin
11.12.2017
11:21:12
тут конечно умные слова типа sortable и serializable

Sergey
11.12.2017
11:21:25
это один из вариантов как можно данные между слоями/компонентами перекидывать. Не единственный

Konstantin
11.12.2017
11:21:25
хотя иммутабельность здесь не совсем верное слово

Sergey
11.12.2017
11:21:50
конкретно тут обсуждалось в контексте форм симфоневых которые требуют конкретно что бы были структуры данных

Konstantin
11.12.2017
11:22:30
и для создания этих структур, собстно и юзать дто

ну, в принципе, логично

конкретно тут обсуждалось в контексте форм симфоневых которые требуют конкретно что бы были структуры данных
я вот еще задумывался над внутренней валидацией данных в ДТО. Но чет мне идея не очень нравится, ибо дофига тогда на них накладываю

Google
Konstantin
11.12.2017
11:23:32
а это уже харам

Konstantin
11.12.2017
11:25:09
приведу конкретный кейс

Sergey
11.12.2017
11:25:25
важно то, что бы логика была разделена по зонам ответственности

Konstantin
11.12.2017
11:25:26
у тебя есть битая csv

ты её парсишь

Sergey
11.12.2017
11:25:38
у тебя структуру csv парсер провалидирует считай)

Konstantin
11.12.2017
11:25:48
я для этого юзал встроенный десериалайзер

Sergey
11.12.2017
11:26:09
а то что в поле dto ничего не записалось - это уже не dto дело. Ну либо у тебя язык умеет в ранайме на нул проверять (котлины всякие)

подходы сильно разнятся в зависимости от языка. Например в kotlin dto делать быстро и удобно

Konstantin
11.12.2017
11:26:34
И после этого у тебя полуубитый массив. Сразу в сущность такие данные пихать нельзя. Поэтому запихал в дто. И в общем-то после ДТО надо как-то сущность обновить и в бд записать

Sergey
11.12.2017
11:26:38
а в php - ну типа чуть удобнее как в java но меньше возможностей

Konstantin
11.12.2017
11:26:43
при этом проверить на корректность значений

и вот где эту проверку делать ?

где-то между отдельным сервисом ?

Sergey
11.12.2017
11:28:22
для начала задумайся какая валидация тебе нужна. пользователю показать где он ошибся или удостовериться что целостность данных не будет нарушена?

и чем эти два вида валидации между собой отличаются

как пример - валидация уникальных значений

Google
Sergey
11.12.2017
11:28:49
типа email при регистрации

Konstantin
11.12.2017
11:29:36
Допустим показать, где ошибся и вывести этот row в консоль

Sergey
11.12.2017
11:29:38
с одной стороны надо пользователю удобно сделать а с другой стороны только уникальный индекс в базе (или блокировки какие) позволит тебе атомарно проверить и записать

а потому у тебя будет 2 варианта валидации) один для пользователя что бы удобно и красиво а другой - ограничения бизнес логики

Sergey
11.12.2017
11:31:36
какую из них?)

Антон
11.12.2017
11:32:38
каждый день одна тема =)

DTO и формы

Konstantin
11.12.2017
11:33:06
Arky
11.12.2017
11:35:30
А мне новый ПР создавать или закомитить в текущий?)

Konstantin
11.12.2017
11:37:27
Да блин, я серьёзно )

Я очень туго вдупляю куда девать валидацию

Антон
11.12.2017
11:40:00
в класс валидации ?

нужно больше классов

Arky
11.12.2017
11:44:30
в текущий
закомитил)

Sergey
11.12.2017
11:44:31
Dmitry
11.12.2017
12:08:05
а кто-нить с Happyr/Doctrine-Specification активно юзал? как справляться, когда нужно сравнивать с результатом выражения исполняемого базой (функция, там, или просто математика нескольких полей)

Dmitry
11.12.2017
13:18:14
да даже проще, что-то типа field1 * field2 > :value

Google
Max
11.12.2017
13:22:46
public function getFilter(QueryBuilder $qb, $dqlAlias) { $qb->setParameter('value', $this->value); return $qb->expr()->eq("$dqlAlias.field1 * $dqlAlias.field2", ':value'); }

если что спеки это просто обертка над doctrine expr

и если немного покапаешься с сорсах то сразу будет видно как что можно прикручивать \Happyr\DoctrineSpecification\Filter\Comparison

\Happyr\DoctrineSpecification\EntitySpecificationRepositoryTrait

Max
11.12.2017
13:26:02
а откуда $value взялся?)
так это уже его дело, хоть через конструктор, хоть еще через что-либо

@miksir чуть обманул, там getFilter нужно переопределить, я подправил пример

Dmitry
11.12.2017
13:35:52
ясно... была такая идея, да... не нравится, что в домене я начинаю завязываться на доктрину...

Admin
ERROR: S client not available

Max
11.12.2017
13:41:31
ясно... была такая идея, да... не нравится, что в домене я начинаю завязываться на доктрину...
с этим нужно смериться, для каких-то простых кейсов ок, что-то сложнее то приходится прокидывать инфраструктуру как ни крути

Roman
11.12.2017
13:42:10
ясно... была такая идея, да... не нравится, что в домене я начинаю завязываться на доктрину...
Выдели интерфейс аля CoolEntitySpecification, и сделай реализацию DoctrineCoolEntitySpecification. Или не подойдет для твоего кейса?

Dmitry
11.12.2017
14:07:24
Выдели интерфейс аля CoolEntitySpecification, и сделай реализацию DoctrineCoolEntitySpecification. Или не подойдет для твоего кейса?
да можно, конечно, но код будет странно выглядеть - почти все спецификации статикой в сервисе, и одна спецификация инжектируется ;)

даже не спецификация, а фабрика

Roman
11.12.2017
14:09:05
даже не спецификация, а фабрика
мб это? https://github.com/K-Phoen/rulerz

Dmitry
11.12.2017
14:11:46
посмотрю, спасибо ;)

Max
11.12.2017
14:19:16
мб это? https://github.com/K-Phoen/rulerz
такое... пытались прикрутить к эластике, в итоге в этой штуке есть конструкции которые уже депрекейтед в самой эластике

?
11.12.2017
15:44:07
а кто-нибудь прикручивал пхпюнит, который поставляется с бриджем из симфони к пхпсторму?

Andrey
11.12.2017
19:43:02
я вот смотрю симфони компоненты и т.д. и офигеваю от того как много всего сделано с умом блин, следующий проект на симфони буду делать, изучать и делать OptionsResolver - круто да все круто

Борис
11.12.2017
19:46:01
Ну не все ? Многие на security жалуются. жесткий ппц. Хоть и красиво, но слишком усложнено уже... Хотя разобраться стоит. Пока разберешься, в живую увидишь все паттерны, а это лучше, чем в книжках абстрактные примеры читать.

Google
Andrey
11.12.2017
20:00:39
Gaiaz Iusipov
11.12.2017
20:02:23
ребята, подкиньте dockerfile для php:fpm-alpine для симфони где нужные пакеты есть, или там по дефолту норм?

Борис
11.12.2017
20:05:30
ребята, подкиньте dockerfile для php:fpm-alpine для симфони где нужные пакеты есть, или там по дефолту норм?
https://github.com/benbor/docker-symfony вот недавно сам форкнул и чуть подпилил. Но далеко, пока что, от production-ready

Vladislav
11.12.2017
20:05:36
по дефолту норм

Gaiaz Iusipov
11.12.2017
20:21:13
спасибо, смотрю

по дефолту норм
спасибо, пробую

https://github.com/benbor/docker-symfony вот недавно сам форкнул и чуть подпилил. Но далеко, пока что, от production-ready
к томуже там вот такая дичь: RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini RUN echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini RUN echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini RUN echo "xdebug.idekey=\"PHPSTORM\"" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini RUN echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini и каждая строка создает отдельный layer в образе, человек писавший это вообще невкуривает про докер. Это надо делать через COPY и папку создать conf.d где удобочитаемо все разместить и копирование уложить в 1 слой

Борис
11.12.2017
20:27:14
Сорри, забыл сказать, включи ветку sf4

Ты прав, я поэтому и форкнул, чтобы руки дошли сделать pr. Но для старта норм.

так там debian, а я на alpine хочу
Так это ж все оффициальные докер PHP - поменяй FROM в докерфайле на alpine и все поедет точно так-же

Vladislav
11.12.2017
20:31:15
так там же обычный конфиг. вообще иди и ищи в laradock все что тебе надо

Vladislav
11.12.2017
20:31:56
apk

Борис
11.12.2017
20:32:11
в alpine разве apt-get пакетный менеджер?
А вот я хз кстати, тут ты, наверное, меня поймал :)

Gaiaz Iusipov
11.12.2017
20:34:32
нее, там точно debian и все равно избыток слоев. Я доделаю выложу свою версию, хочу через ENV чтобы настраивалось, и не привязывалось в симфони, не вижу смысла в этом, нужно огностически подходить, так же как и симфони написан

Vladislav
11.12.2017
20:34:56
могу свой расшарить если хочешь

Gaiaz Iusipov
11.12.2017
20:35:10
конечно, если на гитхабе

Борис
11.12.2017
20:35:41
@g_iusipov я вспомнил, там одинаковые есть команды, что в дебиан что в alpine docker-php-* если только ими пользоваться, то совместимость есть.

Страница 474 из 1418