<?php
namespace App\EventSubscriber\Project;
use App\Event\Project\ProjectAttachedEvent;
use App\Service\Project\ProjectService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* EventSubscriber qui gère la création des sous-projets attachés
* quand un projet avec un parent est créé via sendOne()
*/
class ProjectAttachedSubscriber implements EventSubscriberInterface
{
private ProjectService $projectService;
private EntityManagerInterface $em;
public function __construct(ProjectService $projectService, EntityManagerInterface $em)
{
$this->projectService = $projectService;
$this->em = $em;
}
public static function getSubscribedEvents(): array
{
return [
ProjectAttachedEvent::class => 'onProjectAttached',
];
}
public function onProjectAttached(ProjectAttachedEvent $event): void
{
$entity = $event->getProject();
$parent = $entity->getParent();
if (!$parent) {
return;
}
$attachedParents = $parent->getAttacheds();
if (count($attachedParents) === 0) {
return;
}
$created = 0;
foreach ($attachedParents as $attachedParent) {
$this->projectService->insertAttachedProject($attachedParent, $entity);
$created++;
}
if ($created > 0) {
// Un seul flush pour toutes les entités créées (meilleures performances)
$this->em->flush();
}
}
}