如何合并和处理两个Symfony表单?

3
我有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 ..>

也可以创建一个表单类型或类似的东西。 有关如何处理提交的任何提示吗?
附注:我正在使用symfony/form:^3.0
2个回答

8

使用Symfony表单,所有内容都是表单类型。因此,一个表单具有根类型和子类型。每个子类型可以有其他子类型,以此类推。

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

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

我们使用相同的解决方案,但我们无法验证(isValid())两个表单,你知道什么诀窍吗? - helmi

3
我希望能够扩展@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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接