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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
<?php
namespace KG\BeekeepingManagementBundle\Form\EventListener;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\PropertyAccess\PropertyAccess;
use Doctrine\ORM\EntityRepository;
class TypeRemerageFieldSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
FormEvents::PRE_SET_DATA => 'preSetData',
FormEvents::PRE_SUBMIT => 'preSubmit'
);
}
private function addTypeRemerageForm($form)
{
$form->add('naturel', 'checkbox', array(
'label' => false,
'required' => false
));
}
private function addOrRemoveForm($form, $naturel)
{
if( !$naturel ){
$form->get('reine')->add('race', 'entity', array(
'class' => 'KGBeekeepingManagementBundle:Race',
'choice_label' => 'libelle',
'empty_value' => '',
'empty_data' => null
))
->add('anneeReine', 'collot_datetime',
array(
'pickerOptions' =>
array('format' => 'yyyy',
'autoclose' => true,
'endDate' => date('Y'),
'startView' => 'decade',
'minView' => 'decade',
'maxView' => 'decade',
'todayBtn' => false,
'todayHighlight' => false,
'keyboardNavigation' => true,
'language' => 'fr',
'forceParse' => true,
'pickerReferer ' => 'default',
'pickerPosition' => 'bottom-right',
'viewSelect' => 'decade',
'initialDate' => date('Y'),
),
'read_only' => true
));
}
else{
$form->get('reine')->remove('anneeReine');
$form->get('reine')->remove('race');
}
}
public function preSetData(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (null === $data) {
return;
}
$this->addTypeRemerageForm($form);
$accessor = PropertyAccess::createPropertyAccessor();
$naturel = $accessor->getValue($data, 'naturel');
$this->addOrRemoveForm($form, $naturel);
}
public function preSubmit(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
$naturel = $data['naturel'];
$this->addOrRemoveForm($form, $naturel);
}
} |
Partager