Symfony Compiler Pass: ошибка при добавлении фильтра doctrine - PullRequest
0 голосов
/ 06 мая 2020

Я хочу добавить фильтр doctrine с CompilerPass в созданный мной пакет.

Я пробовал это и Я думаю, что фильтр добавлен (потому что я вызываю dump () в FilterCollection: вызывается функция enable()).

class UserCompilerPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container): void
    {

        $container->getDefinition('doctrine.orm.default_configuration')
            ->addMethodCall('addFilter', [
                'deleted_at',
                DeletedAtFilter::class,
            ])
        ;

        $container->getDefinition('doctrine.orm.default_entity_manager')
            ->addMethodCall('getFilters', [], true)
            ->addMethodCall('enable', [
                'deleted_at',
            ])
        ;

Но теперь у меня такая ошибка:

Аргумент 1 передан в Doctrine \ Bundle \ DoctrineBundle \ ManagerConfigurator :: configure () должен реализовывать интерфейс Doctrine \ ORM \ EntityManagerInterface, экземпляр Doctrine \ ORM \ Query \ FilterCollection, заданный

Я думаю, ->addMethodCall('getFilters', [], true) заменяет исходный класс doctrine.orm.default_entity_manager служба. Вы знаете, как избежать такого поведения?

1 Ответ

0 голосов
/ 11 мая 2020

Третий параметр в addMethodCall указывает компилятору DI использовать возвращаемое значение вызова в качестве экземпляра службы из этой точки.

Как видно из сигнатуры метода:

addMethodCall(string $method, array $arguments = [], bool $returnsClone = false)

, где третий параметр явно задокументирован как «Возвращает ли вызов экземпляр службы или нет».

Если вам нужно вызвать метод enable на FilterCollection необходимо украсить службу конфигуратора и вызвать оттуда метод enable.

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