如何在一个中合并和处理2个symfony表单?

时间:2016-02-07 13:31:05

标签: php symfony

我有两种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。 有关如何处理提交的任何提示?

P.S。我正在使用symfony / form:^ 3.0

2 个答案:

答案 0 :(得分:7)

使用Symfony表单,一切都是表单类型。因此,一个来自根类型,具有子类型。每种子类型都可以有其他子类型等。

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

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

答案 1 :(得分:3)

我想扩展@Wouter J的答案,因为它不适用于我。

我必须在formbuilder中定义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);
    }
}