如何将一个phpcr-odm ReferenceMany字段添加到sonata admin?

时间:2014-05-19 18:33:44

标签: symfony sonata-admin symfony-cmf

在我的文档中,我有一个字段,我想存储相关的节点,我这样定义:

/**
 * @PHPCRODM\ReferenceMany(targetDocument="Symfony\Cmf\Bundle\SimpleCmsBundle\Doctrine\Phpcr\Page", strategy="hard")
*/
protected $related_guides;

我使用文档管理器添加了相关节点,我可以看到它们并在我的twig文件中创建链接。我遇到的问题是允许管理员添加或删除奏鸣曲管理员中的相关节点。

当我使用ORM时,我使用了'sonata_type_collection'但似乎它在ODM中不起作用。我收到了这个错误:

  

INVALID MODE:s537a4d1c263c0_related_guides - type:sonata_type_collection - mapping:8

sonata_type_model_list仅适用于ReferenceOne关系,而对于ReferenceMany,我收到此错误:

  

类' Doctrine \ ODM \ PHPCR \ ReferenceManyCollection'在链配置的命名空间Doctrine \ ODM \ PHPCR \ Document,Sandbox \ MainBundle \ Document,Vectorworks \ Bundle \ CmsBundle \ Document,Symfony \ Component \ Routing,Symfony \ Cmf \ Bundle \ RoutingBundle \ Model,Symfony \ Cmf \中找不到Bundle \ RoutingBundle \ Doctrine \ Phpcr,Symfony \ Cmf \ Bundle \ MenuBundle \ Model,Symfony \ Cmf \ Bundle \ MenuBundle \ Doctrine \ Phpcr,Symfony \ Cmf \ Bundle \ ContentBundle \ Model,Symfony \ Cmf \ Bundle \ ContentBundle \ Doctrine \ Phpcr,Symfony \ Cmf \ Bundle \ BlockBundle \ Model,Symfony \ Cmf \ Bundle \ BlockBundle \ Doctrine \ Phpcr,Symfony \ Cmf \ Bundle \ SimpleCmsBundle \ Doctrine \ Phpcr,Symfony \ Cmf \ Bundle \ SeoBundle \ Model,Symfony \ Cmf \ Bundle \ SeoBundle \ Doctrine \ Phpcr,Symfony \ Cmf \ Bundle \ MediaBundle \ Doctrine \ Phpcr

有没有办法从Sonata Admin中获取此功能? BTW我的字段是Doctrine \ ODM \ PHPCR \ ReferenceManyCollection的类型,以支持@ReferenceMany关系。

2 个答案:

答案 0 :(得分:0)

对于ReferenceMany,请尝试使用" phpcr_document":

$formPapper->add('related_guides', 'phpcr_document', 
    array(
        'property' => 'title',
        'class'    => 'Acme\DemoBundle\Document\TargetClass',
        'multiple' => true,
   ))
->end();

答案 1 :(得分:0)

上面的代码似乎有点旧:对于Symfony 3.3,请使用以下代码:

use Doctrine\Bundle\PHPCRBundle\Form\Type\DocumentType;
...
$formPapper->add('related_guides', DocumentType::class, 
        array(
            'choice_label' => 'title', // where TargetClass::getTitle()
            'class'    => 'Acme\DemoBundle\Document\TargetClass',
            'multiple' => true,
       ))
    ->end();