Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème d'orm

orm

Sujet résolu
    23 novembre 2017 à 15:23:44

    Bonjour 

    Je suis en train de me mettre a jour avec symfony3

     1

    J'ai beau suivre ton tutorial symfony 3, impossible de créer un template bunde(du style corebundle) --> probleme de namespace ?????

    2

    Impossible d'activé les ORM 

    use Doctrine\ORM\Mapping as ORM; ---> en gris ??????

    3

    [Doctrine\Common\Annotations\AnnotationException]
    [Semantical Error] Couldn't find constant Annonce, class OC\PlatformBundle\Entity\Annonce.

    /**
    * @ORM\OneToMany(targetEntity="OC\PlatformBundle\Entity\Image", mappedBy="annonce")
    */
    private $images;

    J'ai déja payer pour le tutoriel symfony2 et si je travaille en symfony2 tout fonctionne

    Par contre en suivant le tuto symfony3 j'ai que des erreurs du style impossible de créer un bundle, problème d'annotation etc

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2017 à 16:11:57

      Bonjour,

      Sans donner plus de précision,

      - par exemple 1 : quelle manip ? quel message d'erreur ?

      - par exemple 2 : on peut supposer que c'est dans une entité ... le gris ne vient pas de Symfony ... si tu montrais ton entité ?

      et ainsi de suite

      c'est quasi impossible d'aider.

      Symfony 3 ne révolutionne pas les bases ... surtout si tu étais en 2.8 ...

      Alors tout cela est bien curieux.

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2017 à 19:21:24

        mon message d'erreur

        [Doctrine\Common\Annotations\AnnotationException]
        [Semantical Error] Couldn't find constant Annonce, class OC\PlatformBundle\Entity\Annonce.

        /**
        * @ORM\OneToMany(targetEntity="OC\PlatformBundle\Entity\Image", mappedBy="annonce")
        */

        mon controller

        <?php

        namespace OC\PlatformBundle\Controller;
        use Symfony\Bundle\FrameworkBundle\Controller\Controller;
        use Symfony\Component\HttpFoundation\Request;
        use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
        use OC\PlatformBundle\Entity\Annonce;
        use OC\PlatformBundle\Entity\Image;

        class AnnonceController extends Controller
        {
        public function indexAction($page)
        {
        if ($page < 1) {
        throw new NotFoundHttpException('Page "' . $page . '" inexistante.');
        }
        // Notre liste d'annonce en dur
        $listAnnonces = array(
        array(
        'titre' => 'Recherche développpeur Symfony',
        'id' => 1,
        'auteur' => 'Alexandre',
        'contenu' => 'Nous recherchons un développeur Symfony débutant sur Lyon. Blabla…',
        'date' => new \Datetime()),
        array(
        'titre' => 'Mission de webmaster',
        'id' => 2,
        'auteur' => 'Hugo',
        'contenu' => 'Nous recherchons un webmaster capable de maintenir notre site internet. Blabla…',
        'date' => new \Datetime()),
        array(
        'titre' => 'Offre de stage webdesigner',
        'id' => 3,
        'auteur' => 'Mathieu',
        'contenu' => 'Nous proposons un poste pour webdesigner. Blabla…',
        'date' => new \Datetime())
        );
        return $this->render('OCPlatformBundle:Annonce:index.html.twig', array(
        'listAnnonces' => $listAnnonces,
        ));
        }

        public function viewAction($id)
        {
        $em = $this->getDoctrine()->getManager();

        // On récupère l'annonce $id
        $annonce = $em->getRepository('OCPlatformBundle:Annonce')->find($id);

        // $annonce est donc une instance de OC\PlatformBundle\Entity\Annonce



        // ou null si l'id $id n'existe pas, d'où ce if :
        if (null === $annonce) {
        throw new NotFoundHttpException("L'annonce d'id ".$id." n'existe pas.");
        }

        $listImages = $em
        ->getRepository('OCPlatformBundle:Image')
        ->findBy(array('annonce' => $annonce));

        return $this->render('OCPlatformBundle:Annonce:view.html.twig', array(
        'annonce' => $annonce,
        'listApplications' => $listImages

        ));
        }

        public function addAction(Request $request)
        {
        $em = $this->getDoctrine()->getManager();
        // Création de l'entité
        $annonce = new Annonce();
        $annonce->setTitre('Recherche développeur Symfony.');
        $annonce->setAuteur('Alexandre');
        $annonce->setContenu("Nous recherchons un développeur Symfony débutant sur Lyon. Blabla…");


        $image = new Image();
        $image->setUrl('https://www.google.fr/search?q=image&rlz=1C1CHBF_frFR751FR751&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjkufbd0NTXAhWIVxQKHTNfCTAQ_AUICigB&biw=1922&bih=986#imgrc=OWH8_JM7S2IcxM:');
        $image->setAlt('tete de chouette');
        // On lie l'image à l'annonce
        $annonce->setImage($image);

        // On récupère l'EntityManager
        $em = $this->getDoctrine()->getManager();

        // Étape 1 : On « persiste » l'entité
        $em->persist($annonce);

        $em->persist($image);


        // Étape 2 : On « flush » tout ce qui a été persisté avant
        $em->flush();

        // Si la requête est en POST, c'est que le visiteur a soumis le formulaire
        if ($request->isMethod('POST')) {
        $request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.');
        // Puis on redirige vers la page de visualisation de cettte annonce
        return $this->redirectToRoute('oc_platform_view', array('id' => $annonce->getId()));
        }
        // Si on n'est pas en POST, alors on affiche le formulaire
        return $this->render('OCPlatformBundle:Annonce:add.html.twig');
        }

        public function editAction($id, Request $request)
        {
        if ($request->isMethod('POST')) {
        $request->getSession()->getFlashBag()->add('notice', 'Annonce bien modifiée.');
        return $this->redirectToRoute('oc_platform_view', array('id' => 5));
        }
        $annonce = array(
        'titre' => 'Recherche développpeur Symfony',
        'id' => $id,
        'auteur' => 'Alexandre',
        'contenu' => 'Nous recherchons un développeur Symfony débutant sur Lyon. Blabla…',
        'date' => new \Datetime()
        );
        return $this->render('OCPlatformBundle:Annonce:edit.html.twig', array(
        'annonce' => $annonce
        ));
        }

        public function deleteAction($id)
        {
        return $this->render('OCPlatformBundle:Annonce:delete.html.twig');
        }
        public function menuAction($limit)
        {
        // On fixe en dur une liste ici, bien entendu par la suite on la récupérera depuis la BDD !
        $listAnnonces = array(
        array('id' => 2, 'titre' => 'Recherche développeur Symfony'),
        array('id' => 5, 'titre' => 'Mission de webmaster'),
        array('id' => 9, 'titre' => 'Offre de stage webdesigner')
        );
        return $this->render('OCPlatformBundle:Annonce:menu.html.twig', array(
        // Tout l'intérêt est ici : le contrôleur passe les variables nécessaires au template !
        'listAnnonces' => $listAnnonces
        ));
        }
        public function editImageAction($annonceId)
        {
        $em = $this->getDoctrine()->getManager();

        // On récupère l'annonce
        $annonce = $em->getRepository('OCPlatformBundle:Annonce')->find($annonceId);
        // On modifie l'URL de l'image par exemple
        $annonce->getImage()->setUrl('test.png');

        // On n'a pas besoin de persister l'annonce ni l'image.
        // Rappelez-vous, ces entités sont automatiquement persistées car
        // on les a récupérées depuis Doctrine lui-même

        // On déclenche la modification
        $em->flush();

        return new Response('OK');
        }
        }
        <?php

        namespace OC\PlatformBundle\Entity;

        use Doctrine\ORM\Mapping as ORM;
        use Doctrine\Common\Collections\ArrayCollection;

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

        /**
        * @var \DateTime
        *
        * @ORM\Column(name="date", type="datetime")
        */
        private $date;

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

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

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

        /**
        * @ORM\OneToMany(targetEntity="OC\PlatformBundle\Entity\Image", mappedBy="annonce")
        */
        private $images;


        public function __construct()
        {
        $this->date = new \Datetime();
        $this->images = new ArrayCollection();
        }

        /**
        * Get id
        *
        * @return int
        */
        public function getId()
        {
        return $this->id;
        }

        /**
        * Set date
        *
        * @param \DateTime $date
        *
        * @return Annonce
        */
        public function setDate($date)
        {
        $this->date = $date;

        return $this;
        }

        /**
        * Get date
        *
        * @return \DateTime
        */
        public function getDate()
        {
        return $this->date;
        }

        /**
        * Set titre
        *
        * @param string $titre
        *
        * @return Annonce
        */
        public function setTitre($titre)
        {
        $this->titre = $titre;

        return $this;
        }

        /**
        * Get titre
        *
        * @return string
        */
        public function getTitre()
        {
        return $this->titre;
        }

        /**
        * Set auteur
        *
        * @param string $auteur
        *
        * @return Annonce
        */
        public function setAuteur($auteur)
        {
        $this->auteur = $auteur;

        return $this;
        }

        /**
        * Get auteur
        *
        * @return string
        */
        public function getAuteur()
        {
        return $this->auteur;
        }

        /**
        * Set contenu
        *
        * @param string $contenu
        *
        * @return Annonce
        */
        public function setContenu($contenu)
        {
        $this->contenu = $contenu;

        return $this;
        }

        /**
        * Get contenu
        *
        * @return string
        */
        public function getContenu()
        {
        return $this->contenu;
        }

        // Vos autres attributs…

        /**
        * @param Image $image
        */

        public function addImage(Image $image)
        {
        $this->images[] = $image;

        $image->setAnnonce($this);
        }
        /**
        * @param Image $image
        */
        public function removeImage(Image $image)
        {
        $this->images->removeElement($image);
        }
        /**
        * @return \Doctrine\Common\Collections\Collection
        */
        public function getImage()
        {
        return $this->images;
        }
        }

        -
        Edité par ClémentSineau 23 novembre 2017 à 19:31:50

        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2017 à 20:06:43

          Et ton entité Image ?

          A+

          • Partager sur Facebook
          • Partager sur Twitter
            24 novembre 2017 à 15:43:08

            je l'ai déja posté mais dans le doute

            <?php

            namespace OC\PlatformBundle\Entity;

            use Doctrine\ORM\Mapping as ORM;

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

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

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

            /**
            * @ORM\ManyToOne(targetEntity="OC\PlatformBundle\Entity\Annonce", inversedBy="images")
            * @ORM\JoinColumn(nullable=false)
            */
            private $annonce;

            /**
            * @param Annonce $annonce
            */
            public function setAnnonce($annonce)
            {
            $this->annonce = $annonce;
            }

            /**
            * @return Annonce
            */
            public function getAnnonce()
            {
            return $this->annonce;
            }

            /**
            * Get id
            *
            * @return int
            */
            public function getId()
            {
            return $this->id;
            }

            /**
            * Set url
            *
            * @param string $url
            *
            * @return Image
            */
            public function setUrl($url)
            {
            $this->url = $url;

            return $this;
            }

            /**
            * Get url
            *
            * @return string
            */
            public function getUrl()
            {
            return $this->url;
            }

            /**
            * Set alt
            *
            * @param string $alt
            *
            * @return Image
            */
            public function setAlt($alt)
            {
            $this->alt = $alt;

            return $this;
            }

            /**
            * Get alt
            *
            * @return string
            */
            public function getAlt()
            {
            return $this->alt;
            }



            }

            • Partager sur Facebook
            • Partager sur Twitter
              24 novembre 2017 à 16:06:52

              Ce n'est vraiment pas pratique de lire ton code sous la forme que tu le mets : tu ne peux utiliser la balise faite pour qui est celle avec le </> ...

              On ne peut même pas dire quelle ligne puisque pas de nuémrotation.

              Je pense que tu devrais ré-écrire la ligne qui pose problème car il doit y avoir un caractère qui ne va pas ... voire un caractère invisible.

              @ORM\OneToMany(targetEntity="OC\PlatformBundle\Entity\Image", mappedBy="annonce")


              A+

              • Partager sur Facebook
              • Partager sur Twitter
                24 novembre 2017 à 23:35:36

                merci de ton aide

                J'ai recréer mes entités

                mais en utilisant les commandes

                php bin/console doctrine:generate:entities OCPlatformBundle:Image

                php bin/console doctrine:generate:entities OCPlatformBundle:Annonce

                php bin/console doctrine:database:drop --force

                php bin/console doctrine:schema:update

                php bin/console doctrine:schema:update --dump-sql
                php bin/console doctrine:schema:update --force
                Bah tout est rentré dans l'ordre....
                J'ai du mal copié ou mal codé
                Merci de ton aide 



                • Partager sur Facebook
                • Partager sur Twitter

                problème d'orm

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown