adam
а в коде(контроллере) дополнительно валидацию вызываешь?
Viktor
Viktor
а в коде(контроллере) дополнительно валидацию вызываешь?
О, я вспомнил почему не работало у меня. У меня цены записываются вместе с товаром. Надо было в свойсво товара добавить атрибут:
Viktor
validationContext еще наверно может влиять, если задан где-то.
Viktor
И да, сильно сомневаюсь, что с DTO это будет работать. DTO это не про данные, которые должны быть уникальны, на этом слое ничего про данные неизвестно, и не должно быть известно, так что по идее кроме как на слой ORM это накидывать бесполезно, но я не проверял.
Вадим
привет! подскажите пож это сильно плохо добавить public/bundles/apiplatform/ в гит?
Юра
Но обычно так не нужно делать
Вадим
да надо в контейнер скопировать а её нету
Юра
Билд пайплайн нужен нормальный
Юра
Но на одной моей работе весь фронт комитили в гит
Юра
Куча файлов измененных каждый раз
Вадим
Билд пайплайн нужен нормальный
да у меня вроде нормальный :)
Вадим
стащил репу, копирую в контейнер nginx
Юра
Ну сделай ассетс инсталл перед этим
Вадим
не понял это ж надо где-то сделать не тащить же мне в контейнер nginx все зависимости симфы только чтобы этот ассет сбилдить симфой
Вадим
или я не понял
Сергей
Где то ж бек билдитсЯ
Вадим
билдится ну типа я сбилдил бек, скопировал наружу эту папочку как-то из контейнера?
Юра
склонил репу, вызвал асетс инстал, скопировал все файлы в конейнер
Юра
у тебя что-ли код проекта маунтится?
Вадим
склонил репу, вызвал асетс инстал, скопировал все файлы в конейнер
не понял где я вызвал ассетс инсталл, на хосте?
Юра
Уже подсказали же
Юра
COPY --from ...
Юра
Почитай про мультистейдж билды
Вадим
COPY --from ...
во, всё понял, спасибо!
Nikolay
Есть один больой запрос, который собирается из нескольких селектов. Я решил вынести каждый запрос в свой класс. Собрать и пройтись по всем классам-запросам, чтобы склеить это все в один. Вопрос такой, норм ли такое делать через tagged iterator? У классов-запросов нет зависимостей, вроде в контейнер их не особо хочется пихать
Юра
Сервис не обязательно должен иметь зависимости чтобы в контейнер попасть
Юра
Просто он сам может быть зависимостью, это нормально
Nikolay
Просто он сам может быть зависимостью, это нормально
Это да, просто там получается в сервисе только метод который строку запроса отдаёт, по сути чистая функция
Юра
Сложно сказать что у тебя за логика там. Но насколько я знаю в симфони нельзя сделать что-то типо строка как сервис, или тегированные строки
Юра
Иногда подходит просто описать сервис в ямле и явно ему аргументы передать
Юра
Но это статический конфиг
Юра
Возможно тебе подойдёт один класс который принимает SQL строку
Юра
А дальше ты в ямле создаёшь сервисы на основе этого класса передавая ему аргумент строку запроса
Юра
Ну т.е. не забываем что помимо автовайринга есть ещё обычный способ описать сервис и он может иметь один класс, но разные айди
Юра
Тегу можно параметр передать, а компилер пасом можно проставить соответствия между этими сервисами и фильтрами или что там у тебя
Юра
Я обычно так делаю. Сначала представляю как это было бы удобнее с точки зрения пользователя, а потом думаю как это реализовать
Юра
Ну и самый гибкий вариант это кастомный конфиг и extension который этот конфиг обрабатывает и что-то делает с контейнером
Nikolay
В сервисе примерно такой код. Вот и весь сервис. Цель просто собрать пройтись и собрать один запрос, поэтому как рабочий вариант думал tagged iterator использовать class TotalSumQuery { public function get(): string { return <<<SQL ... SQL } }
Юра
Ну ты можешь принять в конструкторе запрос например
Юра
И обойтись одним классом
Юра
Вынести в ямл это все
Юра
Тем более там тоже есть мультистрочные скаляры
Nikolay
Ну цель как раз, что каждый запрос отдельно лежит в своем классе, по имени класса можно понять про что запрос
Павел
В сервисе примерно такой код. Вот и весь сервис. Цель просто собрать пройтись и собрать один запрос, поэтому как рабочий вариант думал tagged iterator использовать class TotalSumQuery { public function get(): string { return <<<SQL ... SQL } }
Сделать можно, нужно ли - вопрос. Тут конечно от задачи зависит, но мне кажется там где собирается запрос,горадо приятнее понимать что там будет. Все же вы собираете не абстракцию, а конкретную модель . Т.е. даже какое нить $query.= Main::getQuery() $query.= SubMain::getQuery() Да и вообще в чем проблема забубенить через методы а не через классы. Будет в итоге понятнее чем $foreach($iterator as $queryFactory){ $query.= $queryFactory->getQuery(); } execute($query); // и на этом этапе не понятно что там
Павел
С итератором работают все же с абстракцией, когда не важно что там внутри. Слабо понимаю, как может быть не важно содержимое sql
Nikolay
С итератором работают все же с абстракцией, когда не важно что там внутри. Слабо понимаю, как может быть не важно содержимое sql
Логика такая что на запрос свой класс, могут добавляться новые. Может я конечно и велосипед делаю, подумаю, может и проще все в одном сделать
Павел
Логика такая что на запрос свой класс, могут добавляться новые. Может я конечно и велосипед делаю, подумаю, может и проще все в одном сделать
Это логика понятна, не понятно что даст полезного итератор в этом случае. Будет ли это полезно. Да какой то OCP но он вам нужен в этом месте? не будет ли он конфликтовать с KISS и мешать пониманию происходящего
Павел
Если без итератора, то имеется ввиду вызывать явно каждый класс?
Ну да, или метод. Просто не понятно что решается таким абстрактным подходом
Павел
$query.= $this->getUserQuery(): $query.= $this->getOderQuery(): Я понимаю что тут строится и главное могу быстро пронавигироваться
Nikolay
Ну да, или метод. Просто не понятно что решается таким абстрактным подходом
Пройтись по всему списку запросов и собрать итоговый
Павел
Пройтись по всему списку запросов и собрать итоговый
То что вы хотите технически понятно. Не понятно что оно решает в вашем флоу
Nikolay
В целом согласен, что возможно явно лучше это указать
Павел
Т.е. если бы например у вас было кучу зависимостей - это решает автосборку. Если команда и куча добавляющихся запросов разными участниками - OCP У вас же добавляется абстракция там где она вроде и не нужна + чуть добавляется сложность.
Павел
Прежде всего исходите от того, что вы пытаетесь решить и чем это поможет кому то
Павел
Например у вас может в одном запросе появиться какое то условие. Все вам надо менять весь контракт всех классов, так как у вас интерфейс, а могло бы быть просто $query.= $this->getUserQuery($userId): $query.= $this->getOderQuery():
Nikolay
Чтобы добавить новый запрос. Поэтому я и спросил, потому что как раз возникли сомнения, стоит ли так делать (про итератор)
Павел
Чтобы добавить новый запрос. Поэтому я и спросил, потому что как раз возникли сомнения, стоит ли так делать (про итератор)
Новый заспрой можно добавить хоть лапшой (один большой огромной запорс, без выделения подзапросов вообще). Всегда лишь вопрос что решает то или иное решение
Павел
Например огромный sql без выделения в классы тоже удобно
Павел
Всегда можно скопировать весь запрос и отдебажить в БД
Павел
А не бегать по классам и собирать кусочки в один текст
Павел
Всегда можно скопировать весь запрос и отдебажить в БД
Обратная операция тоже работает. Сформировали запрос в консоли, скопировали тупо в код, а не раскладывать по кусочкам
Павел
Нужно решать сложности и делать сложное проще, а не просто архиткетурить ради архитектуры
The Ant
Квери билдеры нынче не в почете... Бида.
Apxat
А почему ?
The Ant
Сужу по последнему вопросу 🤷
Apxat
просто недавно видео видел от создателя cycleorm
Apxat
он как раз говорил что они выбрали query билдер подход, а не DQL
Apxat
а почему я не понял -)
Apxat
а почему ?
Apxat
мне dql тоже не очень нравится