0

是否可以动态创建 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,但有更好的方法吗?

4

0 回答 0