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
| public function buildForm(FormBuilder $builder, array $options) {
$builder
->add('typetechnologie', 'entity', array('property_path' => false, 'label' => 'Type :', 'required' => true, 'property' => 'libelle', 'empty_value' => 'Choississez...', 'empty_data' => null, 'class' => "IcmeMainBundle:TypeTechnologie", 'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('tt')
->orderBy('tt.libelle', 'ASC');
}));
//->add('technologie', 'collection', array('type' => new TechnologieType(), 'label'=> ' '));
$factory = $builder->getFormFactory();
$rafraichirTechnologie = function ($form, $type) use ($factory) {
$form->add($factory->createNamed('entity', 'technologie', null, array(
'class' => 'IcmeMainBundle:Technologie',
'empty_value' => 'Choisissez...',
'label' => 'Libellé :',
'multiple' => true,
'expanded' => true,
'query_builder' => function (EntityRepository $repository) use ($type) {
$qb = $repository->createQueryBuilder('t')
->innerJoin('t.typetechnologie', 'typetechnologie');
if($type instanceof TypeTechnologie) {
$qb = $qb->where('t.typetechnologie = :typetechnologie')
->setParameter('typetechnologie', $type);
} elseif(is_numeric($type)) {
$qb = $qb->where('typetechnologie.id = :idTypetechnologie')
->setParameter('idTypetechnologie', $type);
} else {
$qb = $qb->where('typetechnologie.id = 1');
}
return $qb;
}
)));
};
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($rafraichirTechnologie) {
$form = $event->getForm();
$data = $event->getData();
if($data === null)
$rafraichirTechnologie($form, null); //As of beta2, when a form is created setData(null) is called first
if($data instanceof TypeTechnologie)
$rafraichirTechnologie($form, $data->getTypetechnologie());
});
$builder->addEventListener(FormEvents::PRE_BIND, function (DataEvent $event) use ($rafraichirTechnologie) {
$form = $event->getForm();
$data = $event->getData();
if(array_key_exists('typetechnologie', $data)) {
$rafraichirTechnologie($form, $data['typetechnologie']);
}
});
} |
Partager