IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Lien entre des photos et une annonce


Sujet :

Symfony PHP

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Billets dans le blog
    1
    Par défaut Lien entre des photos et une annonce
    Bonjour à tous !

    J'aimerai lier a une classe Annonce une classe Photo sur Symfony 3.0. Explications !

    Lorsque je créé ou édite une annonce, j'aimerai que celle-ci puisse contenir une ou plusieurs photos.
    Ainsi, j'aimerai connaître quelle est la / les meilleure(s) solution(s) qui s'offre à moi.

    A noter que j'ai déjà tenter de mettre dans le formulaire de l'annonce une collection de photos sans grand succès.

    Merci d'avance !

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    annonce OneToMany ---------------------------------------- photo
    photo ManytoOne ------------------------------------------- Annonce

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Billets dans le blog
    1
    Par défaut
    Tout d'abord merci à toi de m'aider.

    Voilà ce que je viens de faire :

    Du côté de l'annonce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
      /**    
         * @ORM\OneToMany(targetEntity="adres\GestionBundle\Entity\Photo", mappedBy="annonce")
         *
         * 
         */
     
        private $photos;
     
      /**
         * Add photos
         *
         * @param \Adres\GestionBundle\Entity\Photo $photos
         * @return Annonce
         */
        public function addPhoto(\Adres\GestionBundle\Entity\Photo $photos)
        {
            if($photos->getExtension() ==  null)
                return;
            $this->photos[] = $photos;
     
     
            return $this;
        }
     
      /**
         * Get photos
         *
         * @return \Adres\GestionBundle\Entity\Photo
         */
        public function getPhotos()
        {
            return $this->photos;
     
        }
    Et du côté de la photo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
      /**
         * @ORM\ManyToOne(targetEntity="adres\GestionBundle\Entity\Annonce", inversedBy="photos")
         * 
         */
        private $annonce;
     
    /**
        * set Annonce
        * @param Annonce $annonce
        */
        public function setAnnonce(Annonce $annonce)
        {
            $this->annonce = $annonce;
        }
     
        /**
        * getAnnonce
        * @return Annonce $annonce
        */
        public function getAnnonce()
        {
            return $this->annonce;
        }
    Cela semble cohérent ?

  4. #4
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    dans l'annonce il manque le __construct qui initialise la collection photo.

    voir relation ManyToOne bidirectionnel

    pourquoi bidirectionnel, as toi de voir ?
    à partir de l'annonce tu récupères les photos
    et à partir de photo tu récupère son annonce

    donc bidirectionnelle ! mais peut être tu n'as pas besoin du 2ème cas si c'est le cas c'est une relation manytoOne simple

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Billets dans le blog
    1
    Par défaut
    En effet, il me manque le construct. Le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function __construct() {
     
     
            $this->photos = new \Doctrine\Common\Collections\ArrayCollection();
     
    }
    Seulement, j'ai un problème lors de l'appel de la fonction addPhoto. Un array est passé en paramètre à cette fonction (je suppose l'array qui contient les photos de l'annonce) mais la fonction s'attend à recevoir une photo et non pas un array de photo.

    Cela viendrait-il du controller lorsque je "persist" l'annonce ?

  6. #6
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    non pas un array

    addPhoto a en parametre une photo et non un array de photo

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Billets dans le blog
    1
    Par défaut
    Je sais bien que la fonction addPhoto doit recevoir une Photo. Seulement, j'ai une erreur qui apparaît :

    Expected argument of type "Adres\GestionBundle\Entity\Photo", "array" given
    Cette erreur intervient lors de l'appel d'addPhoto.

    EDIT : Problème résolu mais en voilà un autre qui apparaît. L'ajout, la modification ou encore la suppression d'une photo n'est pas prise en compte ou, en tout cas, n'est pas exécutée.

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Billets dans le blog
    1
    Par défaut
    J'avance tout doucement mais surement !

    Maintenant j'arrive a supprimer mes photos. Mais les photos ne se rajoutent toujours pas.

    Voici la fonction du controller qui est appelé lors de la mise à jour d'une annonce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public function updateAction(Request $request, $id)
        {
            $em = $this->getDoctrine()->getManager();
     
     
            $entity = $em->getRepository('AdresGestionBundle:Annonce')->find($id);
     
     
            if (!$entity) {
                throw $this->createNotFoundException('Unable to find Annonce entity.');
            }
     
    		$photoArray =  $em->getRepository('AdresGestionBundle:Photo')->findBy(array('annonce' => $entity));
     
            $deleteForm = $this->createDeleteForm($id);
            $editForm = $this->createEditForm($entity);
            $editForm->handleRequest($request);
     
     
     
     
            if ($editForm->isValid()) {
                $entity->setDateModificationAnnonce(new \DateTime());
                $entity->setUserModif($this->getUser());
     
     
    			foreach($photoArray as $key=>$ph){
     
     
    				$em->persist($ph);
     
    			}
    			$em->persist($entity);
                $em->flush();
     
     
                return $this->redirect($this->generateUrl('annonce', array('id' => $id)));
            }
     
     
            return $this->render('AdresGestionBundle:Annonce:index.html.twig', array(
                'entity'      => $entity,
                'edit_form'   => $editForm->createView(),
                'delete_form' => $deleteForm->createView(),
            ));
        }

Discussions similaires

  1. [AC-2007] Faire des liens entre les champs d'une table.
    Par maxime42 dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2011, 22h23
  2. [Toutes versions] wss 3 , lien entre des formulaires et une BDD
    Par me_yassine dans le forum SharePoint
    Réponses: 1
    Dernier message: 02/03/2010, 13h59
  3. Liens entre des classes héritées
    Par qwiqwi dans le forum C++
    Réponses: 12
    Dernier message: 09/02/2006, 15h36
  4. Liens entre des bases Access
    Par Zorg44 dans le forum Access
    Réponses: 2
    Dernier message: 17/11/2005, 00h54
  5. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo