是否可以动态创建FormType并避免手动创建新的表单类型类。
目前我必须这样做:
MyController.php
$builder = $this->createBuilder(new ParentEntity());
$builder
->add('parentfield1')
->add('parentfield2');
->add('children', 'collection', array('type' => new ChildType());
ChildType.php
class ChildType extends \Symfony\Component\Form\AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('childname1')
->add('childname2');
}
public function getDefaultOptions(array $options) {
return array(
'data_class' => 'ChildEntity',
);
}
public function getName() {
return 'childentity';
}
}
我想避免手动创建ChildType类,而是执行类似的操作:
MyController.php
$childBuilder = $this->createBuilder(new ChildEntity());
$childBuilder
->add('childfield1')
->add('childfield2');
// how to create FormType from builder???
$childType = $childBuilder->??????;
$builder = $this->createBuilder(new ParentEntity());
$builder
->add('parentfield1')
->add('parentfield2');
->add('children', 'collection', array('type' => $childType);
我尝试使用以下类型获取类型:
$childBuilder->->getFormConfig()->getType();
但这不起作用。我收到错误:
表单的视图数据应该是Namespace \ Bundle \ Entity \ ChildEntity类的实例,但是是Doctrine \ Common \ Collections \ ArrayCollection类的实例。您可以通过将“data_class”选项设置为null或通过添加将类Doctrine \ Common \ Collections \ ArrayCollection的实例转换为Namespace \ Bundle \ Entity \ ChildEntity实例的视图转换器来避免此错误。
目前我提出的最好的方法是创建自定义FormType,接受字段数组作为构造函数但是有更好的方法吗?