我有两种symfony形式:
SignupFormType
和HouseRentFormType
注册表格如下:
<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
答案 0 :(得分:7)
使用Symfony表单,一切都是表单类型。因此,一个来自根类型,具有子类型。每种子类型都可以有其他子类型等。
因此,在这种情况下,您有两种表单类型:SignupFormType
和HouseRentFormType
。您可以将它们用作新表单的子类型:
$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);
}
}