Supprimer un élément de la relation oneToMany

J'ai la Galerie ci-dessous entité

class Gallery
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="Tessa\GalleryBundle\Entity\Photo", mappedBy="gallery", cascade={"persist", "remove"})
     */
    private $photos;

    /* ... */
}

Ce gallery est lié avec un manyToOne relation à un PointOfInterest entité. Voici la déclaration

class PointOfInterest
{
 /* ... */
 /**
 * @ORM\ManyToOne(targetEntity="Tessa\GalleryBundle\Entity\Gallery", cascade={"persist", "remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $gallery;
 /* ... */

J'ai aussi utiliser un Formulaire pour mettre à jour le PointOfInterest entité. Voici le formulaire de déclaration

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
            ->add('name',           'text')
            ->add('gallery',        new GalleryType())
       ;
}

et la GalleryType déclaration.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('photos', 'collection', array('type'          => new PhotoType(),
                                            'required'      => false,
                                            'allow_add'     => true,
                                            'allow_delete'  => true,
                                            'by_reference'  => false
                                            ))
    ;
}

Quand j'ai modifier le PoI je peux ajouter des photos à la galerie sans problème, mais je ne peux pas supprimer quoi que ce soit.

J'ai essayé de crochet sur la galerie PreUpdate, mais il n'est jamais appelé. J'ai imprimé sortie en removePhotos méthode de Gallery entité, et les photos sont supprimées de la galerie. J'ai ensuite suspect de la Galerie pour ne jamais être conservé.

Voici le code, alors je persiste, l' PoI après le montage.

private function handleForm($elem, $is_new)
{
    $form = $this->createForm(new CircuitType, $elem);

    $request = $this->get('request');
    if ($request->getMethod() == 'POST') {
        $form->bind($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($elem);
            $em->flush();

            return $this->redirect($this->generateUrl('tessa_circuit_index'));
        }
    }

    return $this->render('TessaUserBundle:Circuits:add.'.'html'.'.twig',
        array(
            'form' => $form->createView(),
            'is_new' => $is_new,
        ));
}
InformationsquelleAutor tomahh | 2013-04-24