<?php
namespace App\EventSubscriber;
use App\Entity\Cart;
use App\Entity\CartItem;
use App\Event\CartItemPrePersistEvent;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class CartItemSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $_em
) {
}
public static function getSubscribedEvents(): array
{
return [
CartItemPrePersistEvent::NAME => 'onPrePersist'
];
}
public function onPrePersist(CartItemPrePersistEvent $event)
{
$object = $event->getObject();
$cart = $object->getCart();
if (!$cart) {
$cart = (new Cart())
->setClient($object->getClient())
->setUser($object->getUser())
;
$this->_em->persist($cart);
$this->_em->flush();
$object->setCart($cart);
}
$object->setCartItemType($object->getElCourse() ? CartItem::CARTITEM_TYPE_COURSE : "");
}
}