2014-10-15 2 views
1

Я хочу использовать функцию Gallery Gallery Sonata в моем News Entity. Вот мой кодSonata Admin ManyToOne error: "sonata_type_collection - mapping: 2"

News.yml

.... 

manyToOne: 
    gallery: 
     targetEntity: Application\Sonata\MediaBundle\Entity\Gallery 
     inversedBy: news_gallery 
     cascade: ["persist"] 
     nullable: true 

Gallery.orm.xml

.... 

<one-to-many field="news_gallery" 
       target-entity="Wenweipo\NewsBundle\Entity\News" 
       mapped-by="gallery" /> 

NewsAdmin.php

protected function configureFormFields(FormMapper $formMapper) { 

    $formMapper 
     ->add('gallery', 'sonata_type_collection', array(
       'cascade_validation' => true, 
        ), array(
       'edit' => 'inline', 
       'inline' => 'table', 
       'sortable' => 'position', 
       'link_parameters' => array(
        'context' => 'images_news', 
       ), 
         'admin_code'=>'sonata.media.admin.gallery_has_media' 
      )) 

} 

Теперь, когда я запускаю свой код администратора, я получаю эту ошибку.

INVALID MODE : s543e4bf7bc21f_gallery - type : sonata_type_collection - mapping : 2 

Что я делаю неправильно?

+0

попробуйте использовать 'sonata_type_model' –

ответ

1

Попробуйте сделать свое собственное отношение, которое будет держать NewsHasMeda как GalleryHasMedia

News.orm.yml

........ 
oneToMany: 
    news_has_media: 
     targetEntity: Wenweipo\NewsBundle\Entity\NewsHasMedia 
     mappedBy: news 
     cascade: ["persist","remove"] 
     orphanRemoval: true 

Теперь сделайте другой объект с именем, как NewsHasMedia.yml .Застет в yml файле добавить код, как это

NewsHasMedia.orm.yml

........ 
fields: 

    enabled: 
     type: boolean 
     nullable: true 
    position: 
     type: integer 
     nullable: true 
    createdAt: 
     type: datetime 
     column: created_at 
     nullable: true 
    updatedAt: 
     type: datetime 
     column: updated_at 
     nullable: true 


manyToOne: 

    media: 
     targetEntity: Application\Sonata\MediaBundle\Entity\Media 
     cascade: ["persist"] 
     joinColumn: 
      name: media_id 
      referencedColumnName: id 
      #nullable: true 

    news: 
     targetEntity: News 
     inversedBy: news_has_media 
     cascade: ["persist"] 
     joinColumn: 
      name: news_id 
      referencedColumnName: id 

Затем генерировать этот entity.Now в файле администратора добавить этот один

NewsAdmin.php

->add('news_has_media', 'sonata_type_collection', array(

    'cascade_validation' => true), array(

      'edit' => 'inline', 
      'inline' => 'table', 
      'sortable' => 'position', 
      'link_parameters' => array(
       'context' => 'images_news', 
      ), 

     )) 

Теперь нет необходимости указывать admin_code .HOpe это решит вашу проблему.

+0

спасибо, это мне очень помогает. –