Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
i needed a form type that determines based on the bound data if it should be required or not (to make file upload required if we create a new entity, but optional when editing the entity with the file. as this happens in a embedded sonata, i have no way of knowing the actual data when creating the form in the form builder. this is what i came up…
class ImageType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options)
if ($options['required_auto'] && ! $options['required']) {
$builder->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SET_DATA, array($this, 'determineRequired'));
public function setDefaultOptions(OptionsResolverInterface $resolver)
$resolver->setDefaults(array('required_auto' => true, 'required' => false));
public function determineRequired(FormEvent $event)
$data = $event->getData();
$form = $event->getForm();
if (! $data->isNew()) { // my model data knows if it is new or not
$config = $form->getConfig();
$reflection = new \ReflectionClass($config);
$reflection = $reflection->getParentClass();
$prop = $reflection->getProperty('required');
$prop->setValue($config, true);

This comment has been minimized.

Copy link

@ureimers ureimers commented Jun 23, 2016

This might be a rather old problem but is still valid.

Altering the options of a form type based on its data still doesn't seem possible without hacks such as this.


This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment