Inherit form or add type to each form
Have you tried using inheritance?
This is really simple, first you have to define a form type:
# file: Your\Bundle\Form\BaseType.php<?phpnamespace Your\Bundle\Form\Type;use Symfony\Component\Form\AbstractType;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\OptionsResolver\OptionsResolverInterface;class BaseType extends AbstractType{ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name', 'text'); $builder->add('add', 'submit'); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Your\Bundle\Entity\YourEntity', )); } public function getName() { return 'base'; }}
Then you can extend
this form type:
# file: Your\Bundle\Form\ExtendType.php<?phpnamespace Your\Bundle\Form\Type;use Symfony\Component\Form\AbstractType;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\OptionsResolver\OptionsResolverInterface;class ExtendType extends BaseType{ public function buildForm(FormBuilderInterface $builder, array $options) { parent::buildForm($builder, $options); # you can also remove an element from the parent form type # $builder->remove('some_field'); $builder->add('number', 'integer'); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Your\Bundle\Entity\YourEntity', )); } public function getName() { return 'extend'; }}
The BaseType
will display a name field and an add submit button. The ExtendType
will display a name field, an add submit button and a number field.
You can do this with the getParent() function.
<?phpnamespace Your\Bundle\Form;use Symfony\Component\Form\AbstractType;use Symfony\Component\Form\FormBuilderInterface;class ChildType extends AbstractType{ public function buildForm(FormBuilderInterface $builder, array $options) { // $builder->remove('field'); // $builder->add('field); } public function getParent() { return ParentType::class; }}