2016-01-20 1 views
3

Я написал свой собственный класс ведения журнала, который я определил как услугу, и разместил его в пространстве имен AppBundle\Services. Я могу легко получить доступ к нему внутри контроллера, когда я хочу что-то регистрировать, но как насчет доступа к нему из других сервисов?Глобальная служба регистрации

Мне нужно передать службу регистрации как инъекцию зависимостей, но что делать, если у меня установлено более 100 служб (сервисы, модули, прослушиватели событий и т. Д.), Каждый из которых имеет свои собственные зависимости? Это создаст беспорядок.

Я также думал о расширении некоторой основной службы, которая определяет службу ведения журнала, но опять же - все мои службы, модули, прослушиватели событий должны были бы расширить один основной класс.

Каков наилучший подход для решения этой проблемы?

+1

В услугах отправляется событие и выслушиваете его с помощью регистратора. – malcolm

+1

Если у вас уже есть 100 сервисов, то, по мере необходимости, инжектирование регистратора вряд ли будет похоже на беспорядок. Я полагаю, вы могли бы попробовать добавить какой-то тэг регистрации в свои определения сервисов, а затем использовать компилятор для фактического ввода регистратора. Но вряд ли стоит усилий. – Cerad

ответ

0

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

О самом факте безусловного обслуживания, я думаю, что нет проблем с повторным использованием столько, сколько вам нужно по жизненному циклу приложения. На самом деле, symfony будет обрабатывать экземпляр, и вы будете использовать его только как услугу.

Другим подходом будет создание базовых классов для всех ваших основных объектов, позволяющих этим базовым классам обрабатывать службы журналов и конечные классы, будет входить неявным способом. Это не приведет к сохранению вызовов службы, но почти позволит вам обрабатывать их вручную.

Если вы считаете, что используете функцию регистрации в нескольких проектах, я рекомендую вам перейти в папку поставщиков и использовать ее в качестве внешнего модуля, синхронизированного с помощью композитора, в вашу учетную запись github. Это будет как ваш собственный сторонний продукт.

Если вы не знакомы с symfony, тогда вы можете нарушить закон и создать свой собственный шаблон singleton, доступный при автозагрузке, но я думаю, вам следует воспользоваться мощной сервисной структурой symfony.

Смежные вопросы