Symfony позволяет (и рекомендует) внедрять зависимости в сервисах .
Мы добавляем конструктор к подписчику, чтобы внедрить Doctrine и сделать его доступным через $this->entityManager
:
use Doctrine\ORM\EntityManagerInterface;
final class ProductCreateSubscriber implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
public function __construct(
EntityManagerInterface $entityManager
) {
$this->entityManager = $entityManager;
}
public function createHost(GetResponseForControllerResultEvent $event)
{
$product = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$product instanceof Product || Request::METHOD_POST !== $method) {
return;
}
// You can access to the entity manager
$this->entityManager->persist($myObject);
$this->entityManager->flush();
}
Если autowiring включен, вам больше нечего будет делать, служба будет создана автоматически.
Если нет, у вас будет объявить услугу :
App\EventSubscriber\Api\ProductCreateSubscriber:
arguments:
- '@doctrine.orm.entity_manager'