2015-02-02 2 views
2

У меня есть проблема с Sonata формы админ ...Sonata Админ sonata_type_collection

Я хотел бы, чтобы вставить музыку в альбоме с позиции ...

Мой вопрос, когда я создаю альбом ... Я могу добавить много, поскольку хочу AlbumHasMusic ... Но когда я отправляю свою форму ... Каждый альбом AlbumHasMusic имеет нулевой альбом, тогда как музыка и позиции в порядке.

Как я могу добавить идентификатор альбома для каждого альбома AlbumHasMusic?

Это мои Сущности:

Album:

/** 
* Album 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Entity\AlbumRepository") 
* @ORM\HasLifecycleCallbacks() 
*/ 
class Album 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="titre", type="string", length=255) 
    */ 
    private $titre; 

    /** 
    * @var UploadedFile 
    */ 
    private $cover; 

    /** 
    * @var String 
    * 
    * @ORM\Column(name="filename", type="string", length=255, nullable=true) 
    */ 
    private $covername; 

    /** 
    * 
    * @var Array<AlbumHasMusiques> 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\AlbumHasMusiques", mappedBy="album", cascade={"persist"}) 
    */ 
    private $albumHasMusiques; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="updated", type="time", nullable=true) 
    */ 
    private $updated; 
} 

AlbumHasMusic:

/** 
* AlbumHasMusiques 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Entity\AlbumHasMusiquesRepository") 
*/ 
class AlbumHasMusiques 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var Album 
    * 
    * @ORM\ManyToOne(targetEntity="Album") 
    * @ORM\JoinColumn(name="album_id", referencedColumnName="id") 
    */ 
    private $album; 

    /** 
    * @var Musique 
    * 
    * @ORM\ManyToOne(targetEntity="Musique") 
    * @ORM\JoinColumn(name="musique_id", referencedColumnName="id") 
    */ 
    private $musique; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="position", type="integer") 
    */ 
    private $position; 

} 

Music:

/** 
* Musique 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Entity\MusiqueRepository") 
* @ORM\HasLifecycleCallbacks() 
*/ 
class Musique 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="duree", type="time", nullable=true) 
    */ 
    private $duree; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="updated", type="time", nullable=true) 
    */ 
    private $updated; 

    /** 
    * @var string 
    */ 
    private $file; 

    /** 
    * @var String 
    * 
    * @ORM\Column(name="filename", type="string", length=255, nullable=true) 
    */ 
    private $filename; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="titre", type="string", length=255, nullable=true) 
    */ 
    private $titre; 

    /** 
    * @var Genre 
    * 
    * @ORM\ManyToOne(targetEntity="Genre", inversedBy="musiques") 
    * @ORM\JoinColumn(name="genre_id", referencedColumnName="id", nullable=false) 
    */ 
    private $genre; 

    /** 
    * @ORM\ManyToMany(targetEntity="MotClef", inversedBy="musiques") 
    */ 
    private $motsClef; 
} 

Я хотел бы сделать что-то вроде Galeries и медиа Sonata Media Bundle.

И это мой AlbumAdmin:

class AlbumAdmin extends Admin 
{ 
    /** 
    * @param FormMapper $formMapper 
    */ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('titre') 
      ->add('covername') 
      ->add('updated') 
      ->add('albumHasMusiques', 'sonata_type_collection', array(
       'cascade_validation' => true, 
       'by_reference'  => false, 
      ), array(
        'edit'    => 'inline', 
        'inline'   => 'table', 
        'sortable'   => 'position', 
        'link_parameters' => array('context' => 'default'), 
        'admin_code'  => 'app.admin.album_has_musiques', 
       ) 
      ) 
     ; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function prePersist($album) 
    { 
     $album->setAlbumHasMusiques($album->getAlbumHasMusiques()); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function preUpdate($album) 
    { 
     $album->setAlbumHasMusiques($album->getAlbumHasMusiques()); 
    } 
} 

И AlbumHasMusicAdmin:

class AlbumHasMusiquesAdmin extends Admin 
{ 
    /** 
    * @param FormMapper $formMapper 
    */ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('musique', 'sonata_type_model_list', array('required' => true), array(
       'link_parameters' => ['context' => 'default'], 
      )) 
      ->add('position', 'hidden') 
     ; 
    } 
} 

Есть ли у вас какие-либо идеи?

+0

Я думаю, вы можете следовать этому подходу http://stackoverflow.com/a/25154867/853360 и можете увидеть полную версию кода в связанном репозитории –

ответ

1

Я думаю, что вы пропустили что-то в addAlbumHasMusiques() функции в вашем альбоме лица: убедитесь, что вы написали так:

public function addAlbumHasMusiques(\AppBundle\Entity\AlbumHasMusiques $albumHasMusiques) { 
    $albumHasMusiques->setAlbum($this); // The important line !!!! 
    $this->albumHasMusiques[] = $albumHasMusiques; 

    return $this; 
} 
+0

Спасибо, что все работает хорошо! –

Смежные вопросы