【问题标题】:Symfony2 Embedded forms How to assign values of certain form fields to child form fieldSymfony2嵌入式表单如何将某些表单字段的值分配给子表单字段
【发布时间】:2025-12-23 13:15:17
【问题描述】:

我有实体用户和实体公司。

关系是公司(一个)与用户(多个)。

当我注册为公司时,我需要创建这两个对象。

两个对象具有相同的属性:$phone, $firstName, $lastName; (对于公司,这些字段是指主要联系人)。

我的注册表包含 2 个表单:用户表单和嵌入式公司表单。

问题:现在,当我呈现注册表单时,我有重复的字段: 为每个对象呈现的电话、名字、姓氏。

有没有办法以某种方式将它们组合起来,只向用户请求一次这些值,但仍将它们保存到两个实体的数据库中?

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    我已经设法在 PRE_SUBMIT 事件上使用事件侦听器解决了这个问题:

    namespace AppBundle\Form;
    
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    use Symfony\Component\Form\FormEvent;
    use Symfony\Component\Form\FormEvents;
    
    /**
     * Class CompanyRegFormType
     * @package AppBundle\Form
     */
    class UserFormType extends AbstractType
    {
        /**
         * @param FormBuilderInterface $builder
         * @param array                $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('firstName', 'text')
                ->add('lastName', 'text')
                ->add('phone', 'text')
                ->add('company', new CompanyFormType())
                ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event){
                        $data = $event->getData();
                        $data['company']['phone'] = $data['phone'];
                        $data['company']['firstName'] = $data['firstName'];
                        $data['company']['lastName'] = $data['lastName'];
                        $event->setData($data);
                    }
                  );
        }
    
        /**
         * @return string
         */
        public function getName()
        {
            return 'app_user_registration';
        }
    
        /**
         * @param OptionsResolver $resolver
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => 'AppBundle\Entity\User',
            ]);
        }
    }    
    

    【讨论】:

      最近更新 更多