【问题标题】:How to merge and handle 2 symfony forms in one?如何合并和处理 2 个 symfony 表单?
【发布时间】:2016-02-07 13:31:04
【问题描述】:

我有 2 个 symfony 表单:

SignupFormTypeHouseRentFormType

注册表单如下:

<form ..>
<input name='email' .. />
<input name='pass' .. />
..
</form>

房屋租赁表格如下:

<form ..>
<input name='city' .. />
<input name='price' .. />
</form ..>

我想将它们组合起来,使它们看起来像这样:

<form ..>
// house rent info:
<input name='city' .. />
<input name='price' .. />

//registration info:
<input name='email' .. />
<input name='pass' .. />
<input type='submit' />
</form ..>

还可以创建表单类型或 smthng。 关于如何处理提交的任何提示?

附言我正在使用 symfony/form: ^3.0

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    使用 Symfony 表单,一切都是表单类型。所以一个 from 有一个根类型,有子类型。每个子类型都可以有其他子类型等。

    所以在这种情况下,您有 2 种表单类型:SignupFormTypeHouseRentFormType。您可以将它们用作新表单的子类型:

    $form = $formBuilder
        ->add('signup', SignupFormType::class)
        ->add('house_rent', HouseRentFormType::class)
        ->getForm();
    

    【讨论】:

    • 我们使用相同的解决方案,但我们无法验证 (isValid()) 两种形式,你知道一个窍门吗?
    【解决方案2】:

    我想扩展@Wouter J 的答案,因为上面的方法对我不起作用。

    我必须在表单构建器中定义 data_class:

    class SignupHouseRentFormType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('signup', SignupFormType::class, array(
                    'data_class' => Signup::class
                ))
                ->add('house_rent', HouseRentFormType::class, array(
                    'data_class' => HouseRent::class
                ));
        }
    }
    

    然后在控制器中我必须使用相同的命名空间进行数据绑定:

    class SignupHouseRentController extends Controller
    {
    
        public function indexAction(Request $request)
        {
            $signup    = new Signup();
            $houseRent = new HouseRent();
    
            $mergedData = array(
                'signup'    => $signup,
                'houseRent' => $houseRent
            );
    
            $form = $this->createForm(SignupHouseRentFormType::class, $mergedData);
            $form->handleRequest($request);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 2023-03-12
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2019-08-19
      相关资源
      最近更新 更多