<?php namespace Lc\CaracoleBundle\EventSubscriber\Product; use Doctrine\ORM\EntityManagerInterface; use Lc\CaracoleBundle\Model\Address\AddressInterface; use Lc\CaracoleBundle\Model\Product\ProductInterface; use Lc\SovBundle\Doctrine\EntityInterface; use Lc\SovBundle\Doctrine\Extension\SluggableInterface; use Lc\SovBundle\Doctrine\Extension\SortableInterface; use Lc\SovBundle\Doctrine\Extension\StatusInterface; use Lc\SovBundle\Doctrine\Extension\TreeInterface; use Lc\SovBundle\Event\EntityComponentEvent; use Lc\SovBundle\Event\EntityManager\EntityManagerEvent; use Lc\SovBundle\Repository\AbstractRepositoryInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class DuplicateProductfamilyEventSubscriber implements EventSubscriberInterface { protected $em; protected $adminUrlGenerator; public function __construct(EntityManagerInterface $entityManager) { $this->em = $entityManager; } public static function getSubscribedEvents() { return [ EntityComponentEvent::DUPLICATE_EVENT => ['duplicateProductOnDuplicateEvent'], ]; } public function duplicateProductOnDuplicateEvent(EntityComponentEvent $event) { $entity = $event->getEntity(); $classMetadata = $this->em->getClassMetadata(get_class($entity)); /*foreach ($classMetadata->getAssociationMappings() as $associationMapping){ if(in_array(ProductInterface::class, class_implements($associationMapping['targetEntity']))){ /*foreach ($productFamily->getProducts() as $i => $product) { $newProduct = clone $product; $newProduct->setProductFamily($productFamily); $this->em->persist($newProduct); $productFamily->addProduct($newProduct); } $methodGet = 'get'.ucfirst($associationMapping['fieldName']); $methodSet = 'set'.ucfirst($associationMapping['fieldName']); if(method_exists($entity, $methodGet) && method_exists($entity, $methodSet)){ $newAddress = clone $entity->$methodGet(); $entity->$methodSet($newAddress); $this->em->persist($newAddress); } } }*/ } }