2014-11-23 71 views
1

我安装了用于管理联机库的Sonata Admin捆绑包。我只想将image链接到authorOneToOne与sonata_type_admin的关系:字段未链接到管理员

映射无误: [映射]确定 - 映射文件是正确的。 [数据库] OK - 数据库模式与映射文件同步。

这是我author实体领域:

/** 
* 
* @ORM\Column(name="image", type="string", length=255) 
* @ORM\OneToOne(targetEntity="Project\BackendBundle\Entity\Image", cascade={"persist"}) 
* @ORM\JoinColumn(nullable=false) 
*/ 
private $image; 

我创建一个管理类为每个实体:

AuthorAdmin.php

class AuthorAdmin extends Admin 
{ 
    // Fields to be shown on create/edit forms 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('name', 'text', array('label' => 'Author name')) 
      ->add('image', 'sonata_type_admin') 
     ; 
    } 

    // Fields to be shown on filter forms 
    protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
    { 
     $datagridMapper 
      ->add('name') 
     ; 
    } 

    // Fields to be shown on lists 
    protected function configureListFields(ListMapper $listMapper) 
    { 
     $listMapper 
      ->addIdentifier('name') 
     ; 
    } 
} 

但我一直有这样的消息:

当前场image未链接到一个管理员。请创建目标实体一个 :``

的管理员们在admin.yml设置:

services: 
    sonata.admin.author: 
     class: Project\BackendBundle\Admin\AuthorAdmin 
     tags: 
      - { name: sonata.admin, manager_type: orm, group: "Content", label: "Author" } 
     arguments: 
      - ~ 
      - Project\BackendBundle\Entity\Author 
      - ~ 

    sonata.admin.image: 
     class: Project\BackendBundle\Admin\ImageAdmin 
     tags: 
      - { name: sonata.admin, manager_type: orm, group: "Content", label: "Image" } 
     arguments: 
      - ~ 
      - Project\BackendBundle\Entity\Image 
      - 'SonataAdminBundle:CRUD' 

我跟所有的文档,但现在我没有看到这个问题。

回答

4

您的映射不正确。不应该有这样的路线。

@ORM\Column(name="image", type="string", length=255) 

@ORM\Column覆盖@ORM\OneToOne和学说认为这个领域是简单的现场 - 没有关联。

http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-onetoone

+0

我不知道这个关于@ORM \ Column的行为。非常感谢启发这个细节。它现在完美。我只想了解这个注释如何防止Sonata Admin Bundle获取Image Admin类。我的意思是,当包开始生成表单时,它使用Doctrine来检查现有的关系? – 2014-11-25 20:33:21

+1

我认为索纳塔看着Doctrine的ClassMetadataInfo :: associationMappings ['image'] ['targetEntity']'值。但是@ORM \ Column没有像@ORM \ OneToOne这样的关联(这与'AnnotationDriver'内部行为有关)。 – origaminal 2014-11-25 20:39:19

+0

好吧,@ORM \ Column的简单存在可防止ClassMetadataInfo获取图像字段的目标性。我会尝试检查捆绑包的代码。非常感谢分享你的观点。 – 2014-11-25 21:02:21