2015-11-09 6 views
0

J'utilise Symfony 2. J'ai une entité avec une variable protégée, qui est initialisée dans le constructeur en tant que ArrayCollection. Mais que j'utilise la commandeSymfony 2, variable indéfinie, membre protégé initialisé dans le constructeur comme ArrayCollection throughs error, non défini

>php app/console doctrine:fixtures:load -vvv 

Je reçois l'erreur:

[Symfony\Component\Debug\Exception\ContextErrorException] 
Notice: Undefined variable: comments 

Exception trace: 
() at C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\src\BlogBundle\Entity\Post.ph 
p:183 
Symfony\Component\Debug\ErrorHandler->handleError() at C:\Bitnami\wampstack-5.5 
.30-0\sym_prog\dctr\src\BlogBundle\Entity\Post.php:183 
BlogBundle\Entity\Post->addComment() at C:\Bitnami\wampstack-5.5.30-0\sym_prog\ 
dctr\src\BlogBundle\DataFixtures\ORM\LoadAuthorData.php:54 
<...> 

//C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\src\BlogBundle\Entity\Post .php

/** 
* Add comment 
* 
* @param \BlogBundle\Entity\Comment $comment 
* 
* @return Post 
*/ 
public function addComment(\BlogBundle\Entity\Comment $comment) 
{ 
182 $this->comments[] = $comment; 
183 $comments->setPost($this); 
184 return $this; 
} 

// fichier complet: \ DCTR \ src \ BlogBundle \ Entité \ Post.php

<?php 

namespace BlogBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 
use Doctrine\ORM\Mapping\Entity; 
use Doctrine\ORM\Mapping\Id; 
use Doctrine\ORM\Mapping\GeneratedValue; 
use Doctrine\ORM\Mapping\Column; 
use Doctrine\ORM\Mapping\OneToMany; 
use Doctrine\ORM\Mapping\ManyToMany; 
use Doctrine\ORM\Mapping\JoinTable; 
use Doctrine\ORM\Mapping\JoinColumn; 
//use Symfony\Component\Validator\Constraints as Assert; 


/** 
* Post 
* 
* @ORM\Table(indexes={@ORM\Index(name="publication_date_idx",columns="publicationDate")}) 
* @ORM\Entity(repositoryClass="BlogBundle\Entity\PostRepository") 
*/ 
class Post 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

    /** 
    * @var string 
    * 
    * @ORM\Column(name="body", type="text") 
    */ 
    private $body; 

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

    /** 
    * @var Comment[] 
    * 
    * @ORM\OneToMany(targetEntity="Comment", mappedBy="post") 
    */ 
    protected $comments; 

    /** 
    * @var Tag[] 
    * 
    * @ORM\ManyToMany(targetEntity="Tag", inversedBy="posts", fetch="EAGER", cascade={"persist"}, orphanRemoval=true) 
    * @ORM\JoinTable(
    *  inverseJoinColumns={@ORM\JoinColumn(name="tag_name", referencedColumnName="name")} 
    *) 
    */ 
    protected $tags; 

    /** 
    * @var PostAuthor 
    * 
    * @ORM\ManyToOne(targetEntity="PostAuthor", inversedBy="posts") 
    */ 
    protected $author; 

    /** 
    * Initializes collections 
    */ 
    public function __construct() 
    { 
     $this->comments = new ArrayCollection(); 
     $this->tags = new ArrayCollection(); 
    } 

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

    /** 
    * Set title 
    * 
    * @param string $title 
    * 
    * @return Post 
    */ 
    public function setTitle($title) 
    { 
     $this->title = $title; 

     return $this; 
    } 

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

    /** 
    * Set body 
    * 
    * @param string $body 
    * 
    * @return Post 
    */ 
    public function setBody($body) 
    { 
     $this->body = $body; 

     return $this; 
    } 

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

    /** 
    * Set publicationDate 
    * 
    * @param \DateTime $publicationDate 
    * 
    * @return Post 
    */ 
    public function setPublicationDate($publicationDate) 
    { 
     $this->publicationDate = $publicationDate; 

     return $this; 
    } 

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



    /** 
    * Add comment 
    * 
    * @param \BlogBundle\Entity\Comment $comment 
    * 
    * @return Post 
    */ 
    public function addComment(\BlogBundle\Entity\Comment $comment) 
    { 
     $this->comments[] = $comment; 
     $comments->setPost($this); 
     return $this; 
    } 
    /* Another important thing, as already explained, 
    * is that Doctrine only manages the owning side of an association. 
    * This is why we call the setPost() method of the Comment entity 
    * in the addComment() method. This allows persisting 
    * with an association from the inverse side. */ 


    /** 
    * Remove comment 
    * 
    * @param \BlogBundle\Entity\Comment $comment 
    */ 
    public function removeComment(\BlogBundle\Entity\Comment $comment) 
    { 
     $this->comments->removeElement($comment); 
    } 

    /** 
    * Get comments 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getComments() 
    { 
     return $this->comments; 
    } 

    /** 
    * Add tag 
    * 
    * @param \BlogBundle\Entity\Tag $tag 
    * 
    * @return Post 
    */ 
    public function addTag(\BlogBundle\Entity\Tag $tag) 
    { 
     $this->tags[] = $tag; 

     return $this; 
    } 

    /** 
    * Remove tag 
    * 
    * @param \BlogBundle\Entity\Tag $tag 
    */ 
    public function removeTag(\BlogBundle\Entity\Tag $tag) 
    { 
     $this->tags->removeElement($tag); 
    } 

    /** 
    * Get tags 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getTags() 
    { 
     return $this->tags; 
    } 

    /** 
    * Set author 
    * 
    * @param \BlogBundle\Entity\PostAuthor $author 
    * 
    * @return Post 
    */ 
    public function setAuthor(\BlogBundle\Entity\PostAuthor $author = null) 
    { 
     $this->author = $author; 

     return $this; 
    } 

    /** 
    * Get author 
    * 
    * @return \BlogBundle\Entity\PostAuthor 
    */ 
    public function getAuthor() 
    { 
     return $this->author; 
    } 
} 

//sym_prog\dctr\src\BlogBundle\DataFixtures\ORM\LoadAuthorData.php

line 54 $post->addComment($comment); 

//sym_prog\dctr\src\BlogBundle\DataFixtures\ORM\LoadAuthorData.php

<?php 

namespace BlogBundle\DataFixtures; 

/* This fixture creates instances 
of Post, PostAuthor, Comment, and CommentAuthor 
and then persists them to the database. 
*/ 

use BlogBundle\Entity\Comment; 
use BlogBundle\Entity\CommentAuthor; 
use BlogBundle\Entity\Post; 
use BlogBundle\Entity\PostAuthor; 
use Doctrine\Common\DataFixtures\Doctrine; 
use Doctrine\Common\DataFixtures\FixtureInterface; 
use Doctrine\Common\Persistence\ObjectManager; 

/** 
* Author fixtures 
*/ 
class LoadAuthorData implements FixtureInterface 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(ObjectManager $manager) 
    { 
     $postAuthor = new PostAuthor(); 
     $postAuthor->setName('George Abitbol'); 
     $postAuthor->setEmail('[email protected]'); 
     $postAuthor->setBio('L\'homme le plus classe du monde'); 

     $manager->persist($postAuthor); 

     $post = new Post(); 
     $post->setTitle('My post'); 
     $post->setBody('Lorem ipsum'); 
     $post->setPublicationDate(new \DateTime()); 
     $post->setauthor($postAuthor); 

     $manager->persist($post); 

     $commentAuthor = new CommentAuthor(); 
     $commentAuthor->setName('Kévin Dunglas'); 
     $commentAuthor->setEmail('[email protected]'); 

     $manager->persist($commentAuthor); 

     $comment = new Comment(); 
     $comment->setBody('My comment'); 
     $comment->setAuthor($commentAuthor); 
     $comment->setPublicationDate(new \DateTime()); 

     $post->addComment($comment); 
     $manager->persist($comment); 

     $manager->flush(); 
    } 
} 

Répondre

0

ligne 183 vous utilisez $comments avec S mais votre fonction de réception $comment sans S.

/** 
* Add comment 
* 
* @param \BlogBundle\Entity\Comment $comment 
* 
* @return Post 
*/ 
public function addComment(\BlogBundle\Entity\Comment $comment) 
{ 
182 $this->comments[] = $comment; 
183 $comments->setPost($this); // Should be $comment->setPost($this); 
184 return $this; 
} 
0

La solution est: C: \ Bitnami \ wampstack-5.5.30-0 \ sym_p Rog \ DCTR \ src \ BlogBundle \ Entité \ Post.php < ...>

public function addComment(\BlogBundle\Entity\Comment $comment) 
    { 
     181 $this->comments[] = $comment; 
     182 $comment->setPost($this); 
//instead of $comments->setPost($this); 
     183 return $this; 
    } 

Sur la ligne 182, je dois setPost à l'objet de commentaires de $, et non à la variable $ commentaires. La variable Commentaires n'existe pas dans cette méthode, elle n'existe que sous la forme $ this-> comments.
$ this-> commentaires est une variable donc il ne peut pas avoir de méthode setPost ($ this).

+0

... Voici ce que j'ai dit il y a 10minutes ... – Shady