<?php
namespace App\Form\EventListener;
use App\Entity\Reports;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\PropertyAccess\PropertyAccess;
class AddEstadoFieldSubscriber implements EventSubscriberInterface
{
/* private $factory;
public function __construct(FormFactoryInterface $factory)
{
$this->factory = $factory;
}*/
public static function getSubscribedEvents()
{
return [
FormEvents::PRE_SET_DATA => 'onPreSetData',
FormEvents::PRE_SUBMIT => 'onPreSubmit',
];
}
private function addEstadoForm($form, $estado)
{
$form->add($this->factory->createNamed('estado_siniestro', 'entity', $estado, array(
'class' => Reports::class,
'property' => 'estado',
'mapped' => false,
'empty_value' => 'Estado',
'auto_initialize' => false,
'query_builder' => function (EntityRepository $repository) {
$qb = $repository->createQueryBuilder('s')
->groupBy('s.estado');
return $qb;
}
)));
}
public function preSetData(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (null === $data) {
return;
}
$estado = ($data->getSiniestroId()) ? $data->getSiniestroId()->getEstado() : null ;
$this->addEstadoForm($form, $estado);
}
public function preBind(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (null === $data) {
return;
}
$estado = array_key_exists('siniestroId', $data) ? $data['siniestroId'] : null;
$this->addEstadoForm($form, $estado);
}
}