如何在Sonata Admin中配置m2m关系?

时间:2014-12-22 13:57:54

标签: symfony sonata-admin

我正在使用Symfony 2.6.1。

实体配置:http://pastebin.com/rMkYHjkE

管理员课程:

class PlaceAdmin extends Admin
{
    // Fields to be shown on create/edit forms
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            //other fields
            ->add('types', 'collection', array(
                'type'         => new PlaceType,
                'allow_add'    => true,
            ));
        ;
    }
    //other stuff
}

当我尝试编辑所选实体时:

  

“string”类型的预期参数   Symfony \ Component \ Form \ ResolvedFormTypeInterface或   Symfony的\分量\表格\ FormTypeInterface”   给出了“Syloc \ Bundle \ GooglePlacesBundle \ Entity \ PlaceType”

1 个答案:

答案 0 :(得分:1)

来自the docs

  

这是此集合中每个项目的字段类型(例如文本,选项等)。例如,如果您有一组电子邮件地址,则可以使用该电子邮件类型。如果要嵌入其他表单的集合,请创建表单类型的新实例并将其作为此选项传递。

所以你想做类似的事情:

class PlaceAdmin extends Admin
{
    // Fields to be shown on create/edit forms
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            //other fields
            ->add('types', 'collection', array(
                'type'         => 'text',
                'allow_add'    => true,
            ));
        ;
    }
    //other stuff
}

您没有为collection表单类型定义实体类型。也许您还希望sonata_type_collection,而不只是collection?您也不需要通过此表单类型传递子实体类型,因为它自动从实体属性中解析。