Symfony 4.2 - Как украсить UrlGenerator - PullRequest
4 голосов
/ 02 апреля 2019

Я хочу украсить класс Symfony UrlGenerator.

Symfony\Component\Routing\Generator\UrlGenerator: ~

my.url_generator:
    class: AppBundle\Service\UrlGenerator
    decorates: Symfony\Component\Routing\Generator\UrlGenerator
    arguments: ['@my.url_generator.inner']
    public:    false

Я добавил это к services.yml, но мой класс AppBundle\Service\UrlGenerator игнорируется:

Я пыталсяснова следующая конфигурация.

config/services.yaml

parameters:
    locale: 'en'
    router.options.generator_class: AppBundle\Service\UrlGenerator
    router.options.generator_base_class: AppBundle\Service\UrlGenerator

Все еще не работает

Как украсить UrlGenerator в Symfony 4.2?

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Мне кажется, проблема в том, что имя службы UrlGenerator Symfony\Component\Routing\Generator\UrlGeneratorInterface, а не Symfony\Component\Routing\Generator\UrlGenerator (ср. этот код ).

Во-вторых, когда вы декорируете сервис, декоратор примет название сервиса. Так что вам не нужно изменять router.options.generator_class.

Попробуйте с этой конфигурацией:

my.url_generator:
    class: AppBundle\Service\UrlGenerator
    decorates: Symfony\Component\Routing\Generator\UrlGeneratorInterface
    arguments: ['@my.url_generator.inner']

Установка public в false, вероятно, не требуется, так как в Symfony4 / Flex это должно быть значение по умолчанию.

1 голос
/ 02 апреля 2019

Я считаю, что вы должны украсить Symfony\Component\Routing\Generator\UrlGeneratorInterface, потому что службы должны зависеть от интерфейса, а не от конкретной реализации (класса).

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