бд
хардкодом такое делать нет смысла
тут скорее всего напрашивается применение фасада
но тут есть один момент, ка кв вызываемом сервисе видеть все системные классы и обращаться за ними так же как это делается в обычном сервисе?
подскажите, или покажите пример правильной реализации
отлично ложится стратегия, не? $service = $provider->by($pattern)->resolve(); $service->some()
я сначала пошел по самой прсотой схеме $serviceClass = '\App\Service\\' . ucfirst($source->getKeyword()) . 'Service'; (new $serviceClass())->handle(); но тогда я теряю видимость EntityManagerInterface
Смотри, это какой-то кал. Всегда когда происходит магия а-ля (asdasdasService)->handle() уже порочная прктика, потому что ты не застрахован от долбоебов, и получишь фатал на пчп. В сф сущестувет система тегирования, которую ты можешь собирать достаточно удобно. Поэтому изначально они и делали свои АргументРезолвезы через методы supports и resolve. Думаю стоит посмотреть в эту сторону. У тебя всегда доджен быть 1) способ определить метод обработки 2) дефолтное поведение. (а не фатал от пчп)
я хочу написать кучу разных сервисов но все их запускать через метод handle, а в нем уже у каждого своя логика
тебе ничего не мешает заменить это 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
какие ивенты? у меня консольная команда которая в зависимости от типа источника запускает для него нужный обработчик
У тебя проблема в чем? Как вызвать сервисы внутри команды?
есть консольная команда при запуске она лезет в бд и смотрит источники на каждый источник написан свой сервис соответсвенно, при проходе по каждому сервису основной процесс понимает что для данного источника нужно запустить такой то сервис если сделать просто вызов new Class()->handle() то внутри сервиса я не увижу никаких евент менагеров и прочего
Стратегия?
Обсуждают сегодня