Is it possible to set a default for all Symfony FormTypes?
We are currently working on an API Backend based on Symfony (3.3). In the Frontend we have our entities as objects looking like: {"id": 1, "username": "foo" ..... }
If we want to update the entity, we JSON.stringfy the object and send it to the server.
But if we bind the request to our entities via $form->submit($request)
we get an error ("This form should not contain extra fields.") because we don't have (and don't want to use!) "id" in out FormTypes.
So we have to set allow_extra_fields
to true
in every single FormType
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['allow_extra_fields' => true]);
}
Is there a way to configure this as a default for all FormTypes (without extending an custom FormType or something like this)?
You can create a form type extension to change this default value to true
for all form types.
Form type extensions are incredibly powerful: they allow you to modify any existing form field types across the entire system.
class MyFormTypeExtension extends AbstractTypeExtension
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'allow_extra_fields' => true,
));
}
public static function getExtendedTypes(): iterable
{
return [FormType::class];
}
}
See more about how to register type extensions in Official documentation.
Note: The allow_extra_fields
option is defined in FormTypeValidatorExtension
, so make sure your custom type extension is registered after it to override the default value, otherwise use the priority
tag attribute to ensure it.