Как добавить в services.yaml объекты в виде массива в symfony?

Тема в разделе "PHP", создана пользователем verfaa, 13 мар 2020.

XEvil 4.0 Релиз Состоялся!
Метки:
Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    407
    Симпатии:
    47
    Использую symfony 4.3.11
    Создаю TwigFilter

    Код:
        class ProcessorExtension extends AbstractExtension
        {
       
            /**
             * @var Driver[]
             */
            private $drivers;
       
            public function __construct(array $drivers)
            {
                Assert::allIsInstanceOf($drivers, Driver::class);
                $this->drivers = $drivers;
            }
       
            public function getFilters(): array
            {
                return [
                    new TwigFilter("work_processor", [$this, "process"], [ 'is_safe' => ["html"] ])
                ];
            }
       
            public function process(?string $text): string
            {
                $result = $text;
                foreach ($this->drivers as $driver) {
                    $result = $driver->process($text);
                }
                return $result;
            }
        }
    Как видно, в конструктор ProcessorExtension необходимо передать массив объектов типа Driver.

    Добавляю в services.yaml сервисы

    Код:
        App\Twig\Extension\Work\Driver\:
            resource: '../src/Twig/Extension/Work/Driver/*Driver.php'
            tags: ['app.twig.work_processor.driver']
       
        App\Twig\Extension\Work\ProcessorExtension:
            arguments:
                - !tagged app.twig.work_processor.driver
    Пробовал по-разному:

    Код:
        App\Twig\Extension\Work\ProcessorExtension:
            arguments: [!tagged app.twig.work_processor.driver]
    Но неизменно получаю ошибку:
    Argument 1 passed to App\Twig\Extension\Work\ProcessorExtension::__construct() must be of the type array, object given, called in /app/var/cache/dev/ContainerViaxSgZ/srcApp_KernelDevDebugContainer.php on line 974

    Вопрос: Как добавить в конструктор класса ProcessorExtension объекты в виде массива?
     
  2. f0xman

    f0xman Писатель

    Регистр.:
    30 ноя 2016
    Сообщения:
    1
    Симпатии:
    0
    Здесь все есть _symfony.com/doc/4.4/service_container/tags.html