在自定义类型中使用sonata_type_collection

时间:2015-01-16 10:40:07

标签: symfony sonata-admin

我想要做的是将sonata_type_collection添加到我的自定义formType中。 正常的方法是在AdminClass中添加sonata_collection_type到$ 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'
          ))
 }

它不起作用(它只显示提交的标签)。问题是错误的模板,所以我尝试设置formAdminTemplate 我是通过视图中的设置模板制作的

   {% form_theme formElement 'SonataDoctrineORMAdminBundle:Form:form_admin_fields.html.twig' %}

问题是这个' formTheme'中的sonata_admin变量。这个变量不存在于我的表单中。

当然我的表单类型与管理类有关,但我不知道如何告诉symfony这个关系

2 个答案:

答案 0 :(得分:0)

您的收集孩子需要一个管理类:

$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'
    )
);

答案 1 :(得分:0)

我找到解决方案。而是使用我的自定义类型,我使用管理类定义了表单。我在管理员之外需要这个表格,所以这有点困难。

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

 public function getFormBuilder()

 public function defineFormBuilder(FormBuilder $formBuilder)

 public function buildForm()

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