Symfony 4: запускать автономную службу, где на нее нет конкретных ссылок - PullRequest
0 голосов
/ 20 марта 2020

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

Мое мышление сейчас идет в следующем направлении: Создание прохода компилятора:

class SchedulerCompilerPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        // always first check if the primary service is defined
        if (!$container->has(TestService::class)) {
            return;
        }

        $definition = $container->findDefinition(TestService::class);

        // find all service IDs with the app.mail_transport tag
        $taggedServices = $container->findTaggedServiceIds('app.service.standalone');

        foreach ($taggedServices as $id => $tags) {
            $definition->addMethodCall('someFunctionName', arguments);
        }
    }
}

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

Я что-то забыл?

ИЛИ

Есть ли лучший способ просто выполнить эту службу?

1 Ответ

0 голосов
/ 23 марта 2020

Я был поставлен на правильный путь комментарием от Cerad, большое спасибо. Он сослал меня на https://symfony.com/doc/current/event_dispatcher.html

Решение состоит в том, чтобы реализовать EventSubscriberInterface и реализовать следующие функции:

public static function getSubscribedEvents(): array
{
    return [
        RequestEvent::class => 'onKernelRequest',
    ];
}

public function onKernelRequest(RequestEvent $event)
{
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...