Сервисы динамического пакетного конфигурирования в Symfony - PullRequest
0 голосов
/ 21 мая 2019

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

Сегодня я могу вручную настроить свои репозитории Doctrine как службы в services.yml, например:

AppBundle\Repository\MyEntityRepository:
  class: Doctrine\ORM\EntityRepository
  factory: ['@doctrine.orm.default_entity_manager', getRepository]
  arguments:
    - AppBundle\Entity\MyEntity

Проблема этого подхода заключается в том, что он слишком многословен и, на мой взгляд, слишком подвержен ошибкам, регистрируя по отдельности каждый из моих репозиториев (их много!).Мне также нужно синхронизировать их с моим services_test.yml, что еще больше усугубляет проблему.

До этого я работал с какой-то другой библиотекой внедрения зависимостей, PHP-DI, с помощью которой я могу выполнить то, что хочу.использование подстановочных знаков и функции фабрики обратного вызова:

$dependencyInjectionContainerBuilder->addDefinitions([
    'AppBundle\Repository\*' => function (
        \DI\Factory\RequestedEntry $requestedEntry,
        \Doctrine\ORM\EntityManager $em
    ) {
        $className = $requestedEntry->getName();
        $matches = [];
        preg_match('~AppBundle\\\\Repository\\\\(.*)Repository~', $className, $matches);
        if (!empty($matches[1])) {
            return $em->getRepository('AppBundle\\Entity\\' . $matches[1]);
        }
    }
]);

Этот фрагмент кода в основном отслеживает автопроводку для классов AppBundle \ Repository *, а когда находит, вызывает $ em-> getRepository с правильным именем класса и возвращаетэтот объект.

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

Кто-нибудь знает, каксделать это в Symfony 3.4?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...