Запрос Symfony недоступен в EventSubscriber - PullRequest
0 голосов
/ 13 апреля 2019

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

Добавление идентификатора запроса так же просто, как это:

class RequestIdSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [KernelEvents::REQUEST => 'addRequestId'];
    }

    public function addRequestId(GetResponseEvent $event): void
    {
        $request = $event->getRequest();
        $request->attributes->set('RequestId', Uuid::uuid1()->toString());
    }
}

Проблема заключается в том, что запрос кажется недоступным в Doctrine EventSubscribeers надежным способом:

class EntityEventSubscriber implements EventSubscriber
{
    public function __construct(DelayedEventDispatcher $dispatcher, RequestStack $requestStack, LoggerInterface $logger)
    {
        $this->dispatcher = $dispatcher;
        $this->inventory = new EntityInventory();
        $this->requestStack = $requestStack;
        $this->logger = $logger;
    }

    public function getSubscribedEvents(): array
    {
        return [
            Events::postUpdate,
        ];
    }

    public function postUpdate(LifecycleEventArgs $args): void
    {
        // works
        $this->logger->debug($this->requestStack->getCurrentRequest()->get('RequestId')); 

        $entity = $args->getEntity();
        $changes = $this->inventory->getChangeSet($entity);
        $event = new EntityUpdatedEvent($entity, $changes);

        $this->triggerAuditLogEvent($event);
    }

    public function triggerAuditLogEvent(EntityEvent $event): void
    {
        // request.CRITICAL: Uncaught PHP Exception Error: "Call to a member function get() on null"
        $event->setRequestId($this->requestStack->getCurrentRequest()->get('RequestId')); 
        $this->dispatcher->dispatch(FhrEvents::GENERIC_ENTITY_EVENT, $event);
    }
}

Итак, что меня действительно беспокоит, так это то, что запрос кажется доступным в одном методе, и если я вызываю следующий, он уже пропал.

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