add('openingDate', DateType::class, array( "required" => true, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy' )); } // the closingDate should be seen only if period_action = close // or period_action = update AND accopanying period is already closed $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) { $accompanyingPeriod = $event->getData(); $form = $event->getForm(); //add date opening if ( //if the period_action is "close, should not be shown" ($options['period_action'] === 'close') OR ($options['period_action'] === 'create') OR ($options['period_action'] === 'update' AND !$accompanyingPeriod->isOpen()) ) { $form->add('closingDate', DateType::class, array('required' => true, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy')); $form->add('closingMotive', 'closing_motive'); } }); $builder->add('remark', TextareaType::class, array( 'required' => false )) ; } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'Chill\PersonBundle\Entity\AccompanyingPeriod' )); $resolver ->setRequired(array('period_action')) ->addAllowedTypes('period_action','string') ->addAllowedValues('period_action', array( 'update', 'open', 'close', 'create')); } public function buildView(FormView $view, FormInterface $form, array $options) { $view->vars['action'] = $options['period_action']; } /** * @return string */ public function getName() { return 'chill_personbundle_accompanyingperiod'; } }