Событие PostWrite с использованием сервисов в соответствии со свойством события - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть EventSubscriberInterface, называемый PostCreation, который прослушивает событие POST_WRITE. Метод, вызываемый при возникновении события, должен вызывать службу в соответствии с атрибутом «type» объекта, на котором произошло событие.

Следующий код является рабочим примером того, что я хочу:

<?php

class PostCreation implements EventSubscriberInterface
{
    private $processAfterPostCreationTypeAService;
    private $processAfterPostCreationTypeBService;

    public function __construct(
        ProcessAfterPostCreationTypeAService $processAfterPostCreationTypeAService,
        ProcessAfterPostCreationTypeBService $processAfterPostCreationTypeBService
    ) {
        $this->processAfterPostCreationTypeAService = $processAfterPostCreationTypeAService;
        $this->processAfterPostCreationTypeBService = $processAfterPostCreationTypeBService;
    }

    public static function getSubscribedEvents(): array
    {
        return [KernelEvents::VIEW => ['processPostCreation', EventPriorities::POST_WRITE]];
    }

    public function processPostCreation(GetResponseForControllerResultEvent $event): void
    {
        $myObject = $event->getControllerResult();

        if (!$event->getRequest()->isMethod('POST') ||
            !$myObject instanceof MyClass
        ) {
            return;
        }

        /* some code */
        if($myObject->getType() === 'A') {
            $this->processAfterPostCreationTypeAService->doSomething($myObject);
        } else if($myObject->getType() === 'B') {
            $this->processAfterPostCreationTypeBService->doSomething($myObject);
        }
        /* some code */
    }
}

Делать это таким способом невозможно, поэтому я бы хотел найти другое решение, но сам не могу его найти, поэтому мне нужна помощь:

  • Конструктор PostCreation не может знать object.type, потому что он вызывается до наступления события
  • Я не могу легко создать экземпляр ProcessAfterPostCreationTypeAService или ProcessAfterPostCreationTypeBService в методе processPostCreation, поскольку они также являются службами (и требуют внедрения зависимости, настроенного для автоматической проводки)

Я уверен, что инъекция зависимости может помочь мне, но я не могу найти, как.

Так, как сделать что-то обслуживаемое?

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