
Dmitry
28.07.2017
12:19:10
Но по возможности я бы работал через репу

Ed
28.07.2017
12:20:35
спасибо, тоже так думаю

Alexey
28.07.2017
12:57:59
сорри за оффтопик
Ищем Middle-Senior / Senior PHP (Symfony) Developer в Одесский филлиал большой американской компании. Помощь в релокейте, высокие зарплаты, работа долгосрочная. Скайп: aurosonique

Ivan
28.07.2017
13:00:02

Google

Ed
28.07.2017
13:30:25
Я бы не работал через репо
Я может соглашусь, просто пока не вижу причин. Вы можете сказать почему? Для меня интуативно понятно, что если есть выборка из БД, то искать надо в репе, не зависимо от того что она возвращает(dto, массив dto или кастомный массив)

Nikita
28.07.2017
13:41:34
Здравствуйте. Подскажите, как подключить формы из SyliusUi в AppBundle?
При подключении в твиге формы {% form_theme form '@SyliusUi/Form/theme.html.twig' %}
Получаю ошибку Variable "form" does not exist.
Возможно, её необходимо зарегистрировать, но где?

Ivan
28.07.2017
17:48:50
ну и репо с сущностями работает

Sergey
29.07.2017
04:17:15
мне нравится идея делигировать это дело на объект представляющий выборку

Mihail
29.07.2017
08:51:44

Sergey
29.07.2017
10:49:57
какого черта symfony хочет что бы при прогреве кэша у меня уже были env переменные?
мне как-то казалось что вся идея именно в том что бы сделать этот процесс отложенным

Aleh
29.07.2017
13:23:41

Sergey
29.07.2017
13:39:35

Google

Sergey
29.07.2017
13:39:49
$collection->filter($myCriteria)->sum()
ну то есть в целом я не вижу причин не держать подобного в репозиториях
как раз таки это то место которое знает как эту инфу достать

Aleh
29.07.2017
14:05:25
Ну так можно и map добавить)
И reduce

Артур Евгеньевич
29.07.2017
20:24:06
ребята кака рахница между следующими способами задания аргументов
arguments:
-
AppBundle\Utils\HasGeneratorInterface: '@app.hash_generator'
Doctrine\ORM\EntityManager: '@doctrine.orm.entity_manager'
app.link_deleter:
class: AppBundle\TinyLink\LinkDeleter
arguments: ['@doctrine.orm.entity_manager:getRepository']

Sergey
29.07.2017
20:46:21

Артур Евгеньевич
29.07.2017
20:47:00
а что странного?
http://symfony.com/doc/current/service_container/service_locators.html
отсюда брал пример

Daniel
30.07.2017
05:16:51
Ребята, всем привет
Меня тут заставили задуматься по Domain Layer и Persistence Layer + Specification Doctrine Pattern.
По-сути, я вот например использую Happyr/Doctrine-Specification
И тут мне говорят, что подобные правила в спецификациях - это должно относиться к Domain Layer, а сами спецификации, будучи QueryBuilder-ом по-сути, лезут в Persistence Layer.

Bohdan
30.07.2017
07:16:51
тема с этим бандлом интересная, но только в том случае, если за ддд никто не гонится и не стремится делать идеальную архитектуру


Max
30.07.2017
07:59:22
Ребята, всем привет
Меня тут заставили задуматься по Domain Layer и Persistence Layer + Specification Doctrine Pattern.
По-сути, я вот например использую Happyr/Doctrine-Specification
И тут мне говорят, что подобные правила в спецификациях - это должно относиться к Domain Layer, а сами спецификации, будучи QueryBuilder-ом по-сути, лезут в Persistence Layer.
Вообще да, твоя доменная область должна быть отделена от инфраструктуры, чтобы не захломлять доменную логику. Как вариант в спецификациях можно держать только expr объекты - грубо говоря dsl, а все инфраструктурые штуки, например join, group by или через аннотации или через декораторы
Ну у тебя будет класс спецификации на domain layer и его декоратор на persistence layer
Ещё бы не плохо сказать про недостатки
Чрезмерная декомпозиция
Нужно хендлить кучу классов и тп

Google

Sergey
30.07.2017
08:12:29
ну тип того. Смотри, у тебя есть Domain Layer:
- сущности
- интерфейс репозитория (публичная реализация)
- спецификации (в идеале у тебя у сущности есть метод isSutisfiedBy)
ну то есть то что мы с тобой замутили - это вообще трэш)
идеальный пример - спецификации в контексте Doctrine/collection
когда у тебя есть просто у "коллекции" возможность реализовать спецификацию так как тебе хочется
то есть если тебе надо делать join - то это не особо подходит к вопросу спецификаций... во всяком случае я пока такой идеи придерживаюсь
Happyr/Doctrine-Specification - неплохая штука но это больше все же инфраструктура
которую можно использовать в контексте твоих спецификаций
больше вопрос именования)

Ivan
30.07.2017
08:58:00
Max, @fes0r, как примерно выглядит спецификация в предметной области?

Sergey
30.07.2017
08:58:51
как VO примерно, просто какой-то объект с какими-то данными.

Sergey
30.07.2017
08:59:21
а дальше можно по всякому, это и visitor pattern и прочие штуки

Ivan
30.07.2017
09:02:43
а есть пример?

Sergey
30.07.2017
09:04:00
а есть задача конкретная?

Ivan
30.07.2017
09:04:05
спецификация определяется в предметной области, а как её в инфраструктурном слое применять?
книга определённого автора
это подходит под задачу на спецификации?
Book::isSatisfiedBy(AuthorSpecification $spec)
return $spec->visitAuthor($this->author);

Google

Ivan
30.07.2017
09:07:18
AuthorSpecification implements BookSpecification
interface BookSpecification
visitAuthor(Writer $author);
visitSomething(..)
ну а потом
$books->matching(new DoctrineAuthorSpecification($anAuthor)); // из репозитория
аа, вот, это декоратор для AuthorSpecification
это имеется ввиду?

Sergey
30.07.2017
10:08:38
можно делать так, можно делать через визитор - то есть у тебя какой-то сервис есть который хэндлит спецификацию и он уже будет за это отвечать. Суть абсолютно та же что и у варианта с несколькими реализациями собственно

Admin
ERROR: S client not available

Sergey
30.07.2017
10:11:01
> $books->matching(new DoctrineAuthorSpecification($anAuthor)); // из репозитория
вот эта штука строго внутри реализации репозитория. Репозитории - они типа на границе между слоем предметной области и инфраструктурой. То есть интерфейс мы определяем в слое предметной области а имплементация уже в инфраструктуре.
лично я настолько не загоняюсь и у меня чуть в перемешку в этом плане, но в целом понятно
главное что бы за пределы репозитория инфраструктура не вылазила

vlad
30.07.2017
11:19:02
всем доброго времени суток
подскажите, пожалуйста, как отловить любой из дочерних процессов?
да-да, я знаю про очереди, но переписывать на них уже нет времени
если можно как-то это сделать в рамках обычных ->start, ->wait, было бы замечательно
т.е. я запускаю в первом цикле, допустим, 50 процессов
а дальше мне нужно ловить любой первый завершившийся
можно это как-то сделать?
в документации не могу найти

Ivan
30.07.2017
11:39:43

Sergey
30.07.2017
12:14:51

vlad
30.07.2017
12:15:04
средствами symfony

Google

Sergey
30.07.2017
12:15:12
вообще в линуксах всяких ты можешь отслеживать как любой отдельный pid так и вообще все дочерние
черезй wait
так что копай в эту сторону

Артур Евгеньевич
30.07.2017
12:21:14
Парни, как лучше всего превратить PersistentCollection полученный из связи oneToMany в массив массивов или json?
И можно ли передать както Symfony\Component\HttpFoundation\Request в параметр сервиса? или то тчо работает с реквестом не может быть сервисом, и это должно в контроллере обрабатываться?
ПРосто делаю сервис RequestInfoExtractor который будет получать геоинформацию и браузер пользователя, вот пока не решил как его лучше юзать
Короче сделаю его stateless и буду передавать Request в каждый метод

Dmitry
30.07.2017
12:45:08

Артур Евгеньевич
30.07.2017
12:46:39
Большое спасибо!
Парни как правильно обработать дату в контроллере в лучших традициях
я сделал вот так:
if (!empty($expiredDateParam)) {
$expiredDate = DateTime::createFromFormat('Y-m-d', $expiredDateParam);
if ($expiredDate === false) {
throw new Exception('Incorrect date format');
}
} else {
$expiredDate = null;
}
естественно это хуево

Sergey
30.07.2017
18:56:32
вопервых избавимся от else:
$expiredDate = null;
if (!empty(expiredDateParam)) {
//
}
во вторых делаем валидацию данных на входе:
$rules = new Collection([
'expiration_date' => new Optional(new Date()),
]);
$errors = $validator->validate($data, $rules);
if ($errors->count() !== 0) {
// error response
}
в третьих выносим валидацию куда-нибудь что бы можно было потом в других экшенах реюзать (у тебя не актуально н все же)
ну или еще вариант - сделать объект на который мы будем мэпить данные но это типа сложнее

Артур Евгеньевич
30.07.2017
19:09:17
'expiration_date' => new Optional(new Date()), тут проблема что если передать некорректную строку он создаст текущуб дату

Alex
31.07.2017
08:52:41
Добрый день.
После выполнения команды
$this->render('@FrontBundle/Hello/buy.html.twig)
почему то симфони начинает искать тимплейт в (looked into: /home/alex/Documents/Work/repo/vendor/symfony/twig-bridge/Resources/views/Form