How to set default value for form field in Symfony2?

后端 未结 22 1687
暖寄归人
暖寄归人 2020-11-27 13:23

Is there an easy way to set a default value for text form field?

22条回答
  •  一向
    一向 (楼主)
    2020-11-27 13:33

    A general solution for any case/approach, mainly by using a form without a class or when we need access to any services to set the default value:

    // src/Form/Extension/DefaultFormTypeExtension.php
    
    class DefaultFormTypeExtension extends AbstractTypeExtension
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            if (null !== $options['default']) {
                $builder->addEventListener(
                    FormEvents::PRE_SET_DATA,
                    function (FormEvent $event) use ($options) {
                        if (null === $event->getData()) {
                            $event->setData($options['default']);
                        }
                    }
                );
            }
        }
    
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefault('default', null);
        }
    
        public function getExtendedType()
        {
            return FormType::class;
        }
    }
    

    and register the form extension:

    app.form_type_extension:
        class: App\Form\Extension\DefaultFormTypeExtension
        tags:
            - { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }
    

    After that, we can use default option in any form field:

    $formBuilder->add('user', null, array('default' => $this->getUser()));
    $formBuilder->add('foo', null, array('default' => 'bar'));
    

提交回复
热议问题