Есть необходимость вызывать разные сервисы в зависимости от данных из

бд

хардкодом такое делать нет смысла

тут скорее всего напрашивается применение фасада
но тут есть один момент, ка кв вызываемом сервисе видеть все системные классы и обращаться за ними так же как это делается в обычном сервисе?

подскажите, или покажите пример правильной реализации

11 ответов

3 просмотра

отлично ложится стратегия, не? $service = $provider->by($pattern)->resolve(); $service->some()

Evgeniy-Polyakov Автор вопроса
Vlad
отлично ложится стратегия, не? $service = $provide...

я сначала пошел по самой прсотой схеме $serviceClass = '\App\Service\\' . ucfirst($source->getKeyword()) . 'Service'; (new $serviceClass())->handle(); но тогда я теряю видимость EntityManagerInterface

Evgeniy Polyakov
я сначала пошел по самой прсотой схеме $serviceCl...

Смотри, это какой-то кал. Всегда когда происходит магия а-ля (asdasdasService)->handle() уже порочная прктика, потому что ты не застрахован от долбоебов, и получишь фатал на пчп. В сф сущестувет система тегирования, которую ты можешь собирать достаточно удобно. Поэтому изначально они и делали свои АргументРезолвезы через методы supports и resolve. Думаю стоит посмотреть в эту сторону. У тебя всегда доджен быть 1) способ определить метод обработки 2) дефолтное поведение. (а не фатал от пчп)

Evgeniy-Polyakov Автор вопроса
Vlad
Смотри, это какой-то кал. Всегда когда происходит ...

я хочу написать кучу разных сервисов но все их запускать через метод handle, а в нем уже у каждого своя логика

Evgeniy Polyakov
я сначала пошел по самой прсотой схеме $serviceCl...

тебе ничего не мешает заменить это foreach(…..){ asdasd->supports($service) } Все это уже тысячу раз избито и описано https://symfony.com/doc/current/service_container/tags.html Держи брат шорт гайд в тегирование сф https://pastebin.com/Umr2s7CN Но лучше изучить получше. То, что ты обратил внимание на аргумент резолверы уже топчик. Читай доку внимательней и сможешь запилить уже самостоятельно свою стратку

я бы это сделал на ивентах и подписчиках, кидаем ивент где передаем значение от которого зависят вызываемые сервисы, в подписках проверяем, если соответствует - дергаем сервис, нет - значит void, выставляем приоритеты - и вжух другой вариант, но такой же принцип на сообщениях (если нужны асих, ретраи, апишки и пр.) - кидаем сообщение в шину, в хендлерах сообщения сверяем сервис, и дергаем в случае соответствия

https://symfony.com/doc/current/service_container/compiler_passes.html

Evgeniy-Polyakov Автор вопроса
Michel Angelo
я бы это сделал на ивентах и подписчиках, кидаем и...

какие ивенты? у меня консольная команда которая в зависимости от типа источника запускает для него нужный обработчик

Evgeniy Polyakov
какие ивенты? у меня консольная команда которая в ...

У тебя проблема в чем? Как вызвать сервисы внутри команды?

Evgeniy-Polyakov Автор вопроса
Arseniy Skurt
У тебя проблема в чем? Как вызвать сервисы внутри ...

есть консольная команда при запуске она лезет в бд и смотрит источники на каждый источник написан свой сервис соответсвенно, при проходе по каждому сервису основной процесс понимает что для данного источника нужно запустить такой то сервис если сделать просто вызов new Class()->handle() то внутри сервиса я не увижу никаких евент менагеров и прочего

Стратегия?

Похожие вопросы

Обсуждают сегодня

Кто создает тут ботов для телеграмм групп ?
Antskup
8
Я хочу запустить свой проект в тг. Что-то между пирамидой и майнилкой. Еще подобного ничего не было. Уникальная идея. Нужен именно не бот, а приложение. С ввод, выводом тон...
Павел А.
6
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
13
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
господа, когда у вас в боте есть локализация (ру + англ, остальные языки пока не планируются), вы на первом старте как с языком решаете вопрос: смотрите на language_code приле...
Denis 🐍|👑 | darling! 🥰
5
Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
А чего при переходе с 2 на 3 все что в билдере сделано тютю?
Денис Александрович
5
Карта сайта