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();
}
}
... Voici ce que j'ai dit il y a 10minutes ... – Shady