2014-11-23 68 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