Константин
Принял, спсисбо
Aleksandr
ну бля
Aleksandr
как так можно
Юра
А я не знал про messenger использовал всегда rabitmq bundle. А тут такая крутотень оказывается
Сергей
А я не знал про messenger использовал всегда rabitmq bundle. А тут такая крутотень оказывается
messenger - это шина сообщений. Там хоть через реббит, хоть через редис, хоть синхронно их можно отправлять.
Юра
Да я уже прочитал
Юра
Интересно на нем можно задать завтсимость сообщений?
Юра
Чтобы одни задави не выполнялись пока другие не выполнились
Юра
Наверное кастомный сендер надо написать
Юра
Хотя это вробе бодьше message queue а не task queue
ILΨλ
ILΨλ
https://symfony.com/doc/current/components/workflow.html
Юра
Не совсем
Юра
К примеру у меня стоит задача распарсить сайт
Юра
Мне надо создать сраду много задач
Юра
Одни на скачивание, другие на парсинг и т.д
Юра
И вот мне надо чтобы задачи парсинга к примеру ждали пока выполнятся задачи скачивания
Юра
Я это решал вручную
Юра
Вот интересно есть ли готовое
Сергей
Вот интересно есть ли готовое
Есть. Не использовать пхп :D
Сергей
Создаешь очередь со скачанной страницей. На нее вешаешь консьюмер. Консьюмер парсит.
Юра
https://php-enqueue.github.io/
Юра
вот такое наверное что-то
Юра
Но я предпочитаю использовать симфонийские компоненты если они есть, вот и интересно можно ли там как-то организовать такое
Юра
https://php-enqueue.github.io/job_queue/run_sub_job/
Юра
Хотя тоже не совсем то. Мне надо было заранее нагенерить задачи, дерево задач
Юра
Чтобы прогресс отобразить
Юра
А тут по ходу выполнения сабтаски создаются вроде
Daria
Привет! Подскажите, пожалуйста, что еще нужно проверить, чтобы заработало. Symfony 5.0, dev env, пакет 1up-lab/OneupFlysystemBundle. Хочу задать ленивую загрузку для League\Flysystem\Adapter\Local, но она не работает (class_implements($filesystem) не показывает прокси интерфейсы). services: _defaults: autowire: true autoconfigure: true bind: $filesystem: '@oneup_flysystem.local_filesystem_adapter' #other stuff League\Flysystem\Adapter\Local: lazy: true symfony/proxy-manager-bridge и ocramius/proxy-manager ставила, var/cache чистила.
Denis
Приветствую Есть такие контроллеры с довольно простой логикой но с кучей строк (а потому кажутся толстыми). Правильно ли в Symfony такой код хранить в контроллерах? Или лучше выносить куда-то(в сервисы или...), чтобы сделать контроллер тонким? И как правильно это сделать? https://i.imgur.com/eaririz.png
C
loop = asyncio.get_event_loop()
Alexander
В сервисы выносить логику правильнее
Сергей
В сервисы выносить логику правильнее
Если речь идет о том коде, что представлен на картинке, то ему самое место в контроллере, а не в сервисе, имхо.
Александр
чет этих четырех ребят надо сразу в бан, последний бот лихо спалился с ником
Ivan
Это очень похоже на SQL в шаблонах
Юра
Да вынеси все в другой класс, в котором будет все то же самое, зато в контроллере будет одна строка. Профит
Юра
Зато будешь спать спокойно
Daria
шов ас же код
Это код решения https://gist.github.com/glaphire/8b053709800b6804aa4d86664c447a5d
Сергей
Обращаться к репозиторию в контроллере - ИМХО совсем неправильно
вместо репозитория можно добавить какой-нибудь SearchBuilder, всё остальное останется тем же самым
Юра
Можно просто разбить на методы внутри контроллера, чем это хуже?
Юра
А повторяющиеся методы вынести в базовый контроллер
Юра
Переиспользоть код в контроллере никто не мешает
Юра
Это просто говнокол вам попался
Aleksandr
ну а в репозитории его написать, чем не вариант? зачем вообще строить запрос в контроллере?
Юра
Вообще выборки вроде по канону в репозиторий
Юра
Только надо абстрагивароться от объекта риквест, а то получается нехорошо,
Сергей
Засирать репозиторий такими методами тоже не хорошо) Имхо, надо в билдер вынести и будет красиво и фильтры любые можно включать/выключать)
Daria
Засирать репозиторий такими методами тоже не хорошо) Имхо, надо в билдер вынести и будет красиво и фильтры любые можно включать/выключать)
Отдельный класс ***Builder создавать? Разве это не будет клоном репозитория, только с другим названием?)
Юра
В репозитории и так есть квэри билдер
Юра
Получается билдер поверх билдера
Юра
Тут главное не перегнуть, а то бывает от ква абстракций так же подванивает как от лапши
Юра
Все по ситуации
Юра
Я вообще смотрю многим нужен какой-то конкретный ответ
Юра
Нету такого
Сергей
Отдельный класс ***Builder создавать? Разве это не будет клоном репозитория, только с другим названием?)
Я предпочитаю методы репозитория отделять от методов с кучей фильтрующих параметров. Вот в репозитории методам типа findActive, get, findForUser - самое место. А если у вас с формы пришло 32 параметра, то запихивать их в метод репозитория как-то странно. Тут проще создать класс CartSearch. Параметры задать в сеттерах. А в методе search уже выполнять запрос. Так красивее и удобнее как мне кажется
Denis
Я вообще смотрю многим нужен какой-то конкретный ответ
да в целом понятно, однозначного ответа нет, что тоже в принципе ответ, за что и всем благодарен!
Denis
спасибо
Maxim Kainov
Приветствую Есть такие контроллеры с довольно простой логикой но с кучей строк (а потому кажутся толстыми). Правильно ли в Symfony такой код хранить в контроллерах? Или лучше выносить куда-то(в сервисы или...), чтобы сделать контроллер тонким? И как правильно это сделать? https://i.imgur.com/eaririz.png
Репозиторий нужен для абстракции от хранилища. В принципе все норм. Можно вместо квери билдера сделать отдельную функцию в репозитории. А логику (в данном случае это обращение к репозиторию) перенести в отдельный класс-интерактор для абстракции от форм, реквеста и прочего. Но это может быть оверхедом.
Aleksandr
готово
artem
Всем привет. Вопрос от части по симфе. Написал аппликейшн. Там кроме роутинга и контроллеров ничего нет, на пхп без каких-либо библиотек. Сейчас пишу контейнер и вот не знаю где его хранить и инициализировать так чтобы не было моноблока. Как в симфе, в любом месте мог получить объект с контейнера
artem
Т.е. в индексе у меня стартует объект аппликейшн, там впринципе могу и инициализировать контейнер с конфигов. Как сделать так чтобы он был доступен в сервисах итд? Без библиотек, мам, пап и кредитов
Daria
просто с 4й версии отошли от явного использования контейнера для получения классов
artem
Непонятно, проект все-таки на симфе или на голом пхп?)
Голая пыха. В итоге тоже буду инектить объекты в методы как в симфе через рефлексию. Пока только не знаю где сохранить контейнер при инициализации
artem
Непонятно, проект все-таки на симфе или на голом пхп?)
Все немного разобрался. Пока буду в статическом свойстве хранить. Для тестового на пару часов сойдёт. Потом отрефакторю😂😂😂
Сергей
а не проще взять какой-нибудь легковесный фреймворк вроде слима?
artem
а не проще взять какой-нибудь легковесный фреймворк вроде слима?
Не. В тестовом нельзя использовать ничего кроме psr, и то я это выбил. Контейнер нужен чтобы получить пару сервисов и валидатор
artem
Можно и без всего этого, но тогда скучная реализация для позиции сеньора
artem
https://indigotree.co.uk/automatic-dependency-injection-with-phps-reflection-api/
artem
Вот кстати неплохое описание как происходит инекция в конструктор симфони. Единственное что массив депенденси уже будет заполнен при запуске приложения
artem
Пока полет нормальный. Только нужно было сначала отрефакторить классы)) уже подзапутался
Андрей
@artemzakholodilo » Как в симфе, в любом месте мог получить объект с контейнера в симфе настоятельно не рекомендуется получать объект с контейнера в любом месте. да и вообще там по умолчанию все сервисы приватные. для получения сервиса в любом месте тебе надо посмотреть в сторону сервис-локатора