Подключение к событию запроса - Symfony PHP - PullRequest
0 голосов
/ 09 ноября 2018

Обычно при использовании сервисов в Symfony PHP я бы вставлял их в контроллеры следующим образом:

use App\Services\Utilities;

class Home extends Controller {

    public function __construct(Utilities $u){

        $u->doSomething();
    }
}

Но я бы имел доступ к этому сервису только в том случае, если вызывается контроллер Home (/ route match).

Я бы хотел вызывать метод для каждого запроса в Symfony 4 - даже запросов, которые перенаправлены или возвращают 404 - до того, как ответ будет возвращен.

Так ..

Request --> $u->doSomething() --> Response

Что было бы лучшим местом в приложении для введения этой услуги?

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете создать подписчика для запроса события, что-то вроде этого:

<?php declare(strict_types=1);

namespace App\EventSubscribers;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class RequestSubscriber implements EventSubscriberInterface
{
    private $utilites;

    public function __construct(Utilites $something)
    {
        $this->utilites = $something;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::REQUEST => 'onRequest'
        ];
    }

    public function onRequest(GetResponseEvent $event): void
    {
        if (!$event->isMasterRequest()) {
            return;
        }

        $this->utilites->doSoemthing();
    }
}
...