我有一个Form类型,如下所示:
class TestType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, $options){
$builder->add('type', 'text');
$builder->add('name', 'text');
}
}
现在我想要创建一个包含两个TestType
的表单类型,但只有一个'type'
字段用于其中使用的TestType
个字段:
class DoubleTestType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, $options){
$builder->add('first', new TestType());
$builder->add('second', new TestType()); // however this will create one type 'field' for each of the SubForms
}
}
此方法会创建两个TestType
,每个'type'
个字段都包含'type'
个字段,但我希望它们之间共享'type'
字段。一种方法是在DoubleTestType
中创建type
字段,并隐藏TestType
中的DoubleTestType
字段,并使用在{上注册的事件侦听器设置其值{1}}。我正在寻找一种更清洁的方法来做到这一点。
答案 0 :(得分:0)
您可以创建form field type而不是表单类型,然后使用它。
或者您可以通过选项参数控制字段:
public function buildForm(FormBuilderInterface $builder, $options){
$type = isset($options['type']) ? $options['type'] : false;
if ($type) {
$builder->add('type', 'text');
}
$builder->add('name', 'text');
然后:
$builder->add('first', new TestType(array('type' => true)));
$builder->add('second', new TestType());