1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| <?php
namespace Hotels\GestionAnnoncesBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\Event\DataEvent;
use Doctrine\ORM\EntityRepository;
class ProvinceType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
/*$builder
->add('nom')
->add('departement')
->add('pays')
;*/
$builder
->add('nom')
->add('departement');
$factory = $builder->getFormFactory();
$refreshPays = function ($form, $departement) use ($factory)
{
$form->add($factory->createNamed('entity','pays',null, array(
'class' => 'Hotels\GestionAnnoncesBundle\Entity\Pays',
'property' => 'name',
'label' => 'Pays',
'query_builder' => function (EntityRepository $repository) use ($departement)
{
$qb = $repository->createQueryBuilder('pays');
$qb = $qb->where('pays.id = departement.pays');
return $qb;
}
)));
};
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($refreshPays)
{
$form = $event->getForm();
$data = $event->getData();
if($data == null)
$refreshPays($form, null); //As of beta2, when a form is created setData(null) is called first
if($data instanceof Province)
{
$refreshPays($form, $data->getDepartement()->getPays());
}
});
$builder->addEventListener(FormEvents::PRE_BIND, function (DataEvent $event) use ($refreshPays)
{
$form = $event->getForm();
$data = $event->getData();
if(array_key_exists('pays', $data))
{
$refreshPays($form, $data['pays']);
}
});
}
public function getName()
{
return 'hotels_gestionannoncesbundle_provincetype';
}
} |
Partager