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

бд

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

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

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

11 ответов

19 просмотров

отлично ложится стратегия, не? $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() то внутри сервиса я не увижу никаких евент менагеров и прочего

Стратегия?

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта