Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony] datetime vide lors dun flush

Sujet résolu
    30 septembre 2015 à 10:21:49

    Bonjour a tous,

    J'ai commencé à suivre le tuto de winzou hier, et aujourd'hui j'ai attaqué la partie Entity. (Vraiment intéressant ce symfony2)!

    J'avais une erreur lors de mon $em->flush, il me retourne  Integrity constraint violation: 1048 Column 'date' cannot be null.

    Il y a un commentaire que je ne comprend pas dans le code suivant (*1 et *2):

      public function addAction(Request $request)
      {
        // Création de l'entité
        $advert = new Advert();
        $advert->setTitle('Recherche développeur Symfony2.');
        $advert->setAuthor('Alexandre');
        $advert->setContent("Nous recherchons un développeur Symfony2 débutant sur Lyon. Blabla…");
        // On peut ne pas définir ni la date ni la publication, *1
        // car ces attributs sont définis automatiquement dans le constructeur *2
    
        // On récupère l'EntityManager
        $em = $this->getDoctrine()->getManager();
    
        // Étape 1 : On « persiste » l'entité
        $em->persist($advert);
    
        // Étape 2 : On « flush » tout ce qui a été persisté avant
        $em->flush();
    
        // Reste de la méthode qu'on avait déjà écrit
        if ($request->isMethod('POST')) {
          $request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.');
          return $this->redirect($this->generateUrl('oc_platform_view', array('id' => $advert->getId())));
        }

    le code de mon entity est celui du Tuto!

    Etant un très bon élève j'ai trouvé une solution mais j'aimerai savoir si il est correct dans la philosophie?

    j'ai rajouté cette ligne au dessus de mes commentaires 1 et 2,

    $advert->SetDate();

    et j'ai modifié le entity de cette manière,

     public function setDate()
        {
            $this->date = new \DateTime();
    
            return $this;
        }

    Est ce correct ? il y a mieux a faire ? 

    Dernière question, quelqu'un peut m'expliquer le \. Tout ca est encore frais pour moi mais je comprend pas l'histoire d'instancier...


    Merci a vous,



    -
    Edité par loic84 30 septembre 2015 à 10:27:55

    • Partager sur Facebook
    • Partager sur Twitter
      30 septembre 2015 à 10:31:13

      Salut,

      le \ signifie que tu appel une classe de php et non une classe du namespace de symfony.

      Le commentaire signifie que normalement dans ton advert tu as une fonction construct qui initialise ta date. L'as tu bien créée?

      • Partager sur Facebook
      • Partager sur Twitter
        30 septembre 2015 à 10:45:48

        Plop,

        Quand je dois mettre une date, perso je le fais dans le constructeur genre : 

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

        Après si ton DateTime est vide lors de l'insertion c'est que tu dois avoir un problème avec un format de date je pense. Je devais insérer des dates sur un autre projet, et ça m'envoyait des dates vides, et du coup bah c'était ça, un problème de format ^^, à voir :)

        • Partager sur Facebook
        • Partager sur Twitter
        Si t'as pas d'amis, prends un curly, et si t'as pas de curly vas à Simply (Je sors >> [-] oui ceci est une porte)
          30 septembre 2015 à 10:58:52

          @Cedric, Ok j'ai compris le coup du \

          @Cedric et @silverblack37, Non  je ne l'ai pas crée, cette fonction construc,

          Si j'ai bien compris dans mon Advert ca doit ressembler a ca:

           public function setDate($date)
              {
                  $this->date = $date;
          
                  return $this;
              }

          Permet de "seter" si jamais je dois donner une autre date que la date actuel

          et 

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

          Est une fonction qui n'a pas besoin d’être appelé elle est autonome? et du coup je me retrouve bien avec un controleur qui fait ca tout seul...

          J'avais vraiment pas compris la notion de __construct,

          Merci



          • Partager sur Facebook
          • Partager sur Twitter
            30 septembre 2015 à 11:03:53

            En fait tu as toujours un constructeur, même s'il ne se voit pas, y'en a un par défaut. Par contre oui là tu le donnes explicitement et à chaque fois que tu vas appeler ton entité hop tu vas passer dedans et mettre une date par défaut.

            Si tu as changé la date dans ton formulaire, la valeur sera mise à jour via le setDate().

            • Partager sur Facebook
            • Partager sur Twitter
            Si t'as pas d'amis, prends un curly, et si t'as pas de curly vas à Simply (Je sors >> [-] oui ceci est une porte)
              30 septembre 2015 à 11:07:06

              cedric3387 a écrit:

              le \ signifie que tu appel une classe de php et non une classe du namespace de symfony.

              Non, \ représente le namespace global, dans lequel DateTime est définie. Si on doit l'écrire c'est parce que PHP résout les classes dans le namespace courant, qui dans ta classe est celui de ta classe, pas le global.

              • Partager sur Facebook
              • Partager sur Twitter
              Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
                30 septembre 2015 à 11:30:54

                Nightmat, merci pour la précision mais c'est bien ce que j'avais compris,

                Si je fais pas ca il ne va pas comprendre car il ne va pas trouver la classe dans ma classe...

                • Partager sur Facebook
                • Partager sur Twitter
                  21 janvier 2018 à 18:27:38

                  Merci beaucoup cela m'a aidé aussi :)



                  -
                  Edité par CerjerPerpi 21 janvier 2018 à 18:30:37

                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Symfony] datetime vide lors dun flush

                  × 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