Skip to content

Instantly share code, notes, and snippets.

@dbu
Created March 12, 2013 11:03
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save dbu/5142035 to your computer and use it in GitHub Desktop.
Save dbu/5142035 to your computer and use it in GitHub Desktop.
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…
<?php
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->setAccessible(true);
$prop->setValue($config, true);
}
}
}
@mik-laj
Copy link

mik-laj commented Dec 30, 2016

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