在自定义类型中使用 sonata_type_collection

Use sonata_type_collection inside custom type

我想要做的是将 sonata_type_collection 添加到我的自定义 formType。 正常的方法是将 sonata_collection_type 添加到 AdminClass 中的 $formMaper,例如:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper->add('elements, 'sonata_type_collection', array(
             'some_options' => 'options'
          ))
 }

它工作完美,但我有我的自定义表单类型,当我定义它时:

public function buildForm(FormBuilderInterface $builder, array $options)
{

     $formMapper->add('elements, 'sonata_type_collection', array(
             'some_options' => 'options'
          ))
 }

它不起作用(它只出现 filed 标签)。问题是错误的模板,所以我尝试设置 formAdminTemplate 我是在view

中设置模板制作的
   {% form_theme formElement 'SonataDoctrineORMAdminBundle:Form:form_admin_fields.html.twig' %}

问题出在 'formTheme' 中的 sonata_admin 变量。我的表单中不存在此变量。

当然我的表单类型与 admin 相关 class 但我不知道如何将这种关系告诉 symfony

您的 collection child 需要管理员 class :

$formMapper->add('customizations', 'sonata_type_collection',
    array(
        'required'      => true,
        'type_options'  => array('delete' => true),
        'by_reference'  => false,
        'mapped'        => true
    ),
    array(
        'edit'          => 'inline',
        'inline'        => 'table',
        'sortable'      => 'position',
        'targetEntity'  => '/path/to/Entity/Customization',
        'admin_code'    => 'my.service.customization_admin'
    )
);

我找到了解决办法。我使用 admin class 定义了表单,而不是使用我的自定义类型。我需要管理员以外的表格,所以有点困难。

首先,在我的控制器中,我从服务中获得管理员 class。在 admin class 中,我重写了 3 个用于创建表单的方法

 public function getFormBuilder()

 public function defineFormBuilder(FormBuilder $formBuilder)

 public function buildForm()

然后我不得不通过奏鸣曲管理方式保存我的实体。使用 create 方法代替 handleRequest.