<?php
namespace App\EventSubscriber\Form;
use App\Entity\User;
use Doctrine\ORM\EntityRepository;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class AddUtilisateurFieldByReseauSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SET_DATA => 'preSetData',
FormEvents::PRE_SUBMIT => 'preSubmit',
];
}
public function preSetData(FormEvent $event)
{
$form = $event->getForm();
$reseau = $form->get('reseau')->getData();
$this->addField($form, $reseau);
}
public function preSubmit(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (array_key_exists("reseau", $data)) {
$reseau = $data["reseau"];
$this->addField($form, $reseau);
}
}
private function addField(
$form,
$reseau
)
{
$form->add('utilisateur', EntityFilterType::class,
[
'class' => User::class,
'choice_label' =>
function (
User $user
) {
return sprintf("%s %s", $user->getName(), $user->getFirstname());
},
'query_builder' =>
function (
EntityRepository $er
) use
(
$reseau
) {
return $er->createQueryBuilder('u')
->where('u.reseau = :reseau')
->setParameter('reseau', $reseau)
->orderBy("u.name", 'ASC')
->addOrderBy("u.firstname", 'ASC');
},
]
);
}
}