
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
а это уже харам

Sergey
11.12.2017
11:24:45
ну короч не важно

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 варианта валидации) один для пользователя что бы удобно и красиво а другой - ограничения бизнес логики

Konstantin
11.12.2017
11:30:45

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
в класс валидации ?
нужно больше классов

Sergey
11.12.2017
11:44:13

Arky
11.12.2017
11:44:30

Sergey
11.12.2017
11:44:31

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

Max
11.12.2017
13:16:29

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

Константин
11.12.2017
13:25:11

Max
11.12.2017
13:26:02
@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

Dmitry
11.12.2017
14:07:24
даже не спецификация, а фабрика

Roman
11.12.2017
14:09:05

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

Max
11.12.2017
14:19:16

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

Stanislav
11.12.2017
16:08:11

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

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

Google

Boris
11.12.2017
20:00:19

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

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. Но для старта норм.

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

Gaiaz Iusipov
11.12.2017
20:31:28

Vladislav
11.12.2017
20:31:56
apk

Борис
11.12.2017
20:32:11

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-* если только ими пользоваться, то совместимость есть.