2015-11-09 2 views
2

Je ne peux pas accéder à l'entité entité par rubrique.objet L'entité USER est null lorsque j'essaie d'y accéder à partir du modèle de brindille

Dans la branche de modèle i utiliser dump pour afficher la requête de résultat ...:

{% for forum in listForums %} 
    {{ dump (forum.topics.last)}} 
    .... 

nous pouvons voir que l'entité utilisateur est vide (null):

Topic {#1456 ▼ 

    -Forum: Forum {#435 ▶} 
    -Posts: PersistentCollection {#1457 ▶} 
    -id: 65 
    -title: "How to go over there" 
    -User: User {#1294 ▼ 

    -_entityPersister: BasicEntityPersister {#1291 ▶} 
    -_identifier: array:1 [▶] 
    +__isInitialized__: false 
    -Topics: null 
    #id: null 
    -pseudo: null 
    -name: null 
    -firstname: null 
    -website: null 
    -avatar: null 
    -signature: null 
    -location: null 
    -registration: null 
    -lastVisit: null 
    -rank: null 
    -nbPost: null 
    -nbTopic: null 
    #username: null 
    #usernameCanonical: null 
    #email: null 
    #emailCanonical: null 
    #enabled: null 
    #salt: null 
    #password: null 
    #plainPassword: null 
    #lastLogin: null 
    #confirmationToken: null 
    #passwordRequestedAt: null 
    #groups: null 
    #locked: null 
    #expired: null 
    #expiresAt: null 
    #roles: null 
    #credentialsExpired: null 
    #credentialsExpireAt: null 

} 
    -viewCount: 23 
    -dateCreation: DateTime {#1455 ▶} 
    -replyCount: 123 
    -slug: "slug_sluggg" 
    -genre: "genre" 
    -lastPost: 25 
    -content: """ 
    <p>test</p>\r\n 
    \r\n 
    <p>test2</p>\r\n 
    \r\n 
    <p>test3</p> 
    """ 
} 

Une partie du contrôleur

class FController extends Controller 
{ 

    public function indexAction() 
    { 

     $em = $this->getDoctrine()->getManager(); 
     $user = $this->getUser(); 

     $listForums = $em->getRepository('BISSAPForumBundle:Forum')->findAllOrderByCategory(); 

     return $this->render('BISSAPForumBundle:F:index-forum.html.twig', array('listForums' => $listForums, 'user' => $user)); 
    } 
} 

Topic.php

<?php 

namespace BISSAP\ForumBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
/*use BISSAP\BodyConcept\Entity\Forum; 
*/ 

/** 
* Topic 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="BISSAP\ForumBundle\Entity\TopicRepository") 
*/ 
class Topic 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Forum", inversedBy="Topics", cascade={"persist"}) 
    * @ORM\JoinColumn(name="forum_id", referencedColumnName="id") 
    */ 
    private $Forum; 

    /** 
    * @var ArrayCollection $Posts 
    * 
    * @ORM\OneToMany(targetEntity="Post", mappedBy="Topic", cascade={"persist", "remove", "merge"}) 
    */ 
    private $Posts; 

    /** 
    * @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; 

    /** 
    * @ORM\ManyToOne(targetEntity="BISSAP\UserBundle\Entity\User", inversedBy="Topics", cascade={"persist"}) 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $User; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="view_count", type="integer") 
    */ 
    private $viewCount; 

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

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="reply_count", type="integer") 
    */ 
    private $replyCount; 

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

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

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="last_post", type="integer") 
    */ 
    private $lastPost; 

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


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

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

     return $this; 
    } 

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

    /** 
    * Set user 
    * 
    * @param integer $user 
    * @return Topic 
    */ 
    public function setUser($user) 
    { 
     $this->user = $user; 

     return $this; 
    } 

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

    /** 
    * Set viewCount 
    * 
    * @param integer $viewCount 
    * @return Topic 
    */ 
    public function setViewCount($viewCount) 
    { 
     $this->viewCount = $viewCount; 

     return $this; 
    } 

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

    /** 
    * Set dateCreation 
    * 
    * @param \DateTime $dateCreation 
    * @return Topic 
    */ 
    public function setDateCreation($dateCreation) 
    { 
     $this->dateCreation = $dateCreation; 

     return $this; 
    } 

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

    /** 
    * Set replyCount 
    * 
    * @param integer $replyCount 
    * @return Topic 
    */ 
    public function setReplyCount($replyCount) 
    { 
     $this->replyCount = $replyCount; 

     return $this; 
    } 

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

    /** 
    * Set slug 
    * 
    * @param string $slug 
    * @return Topic 
    */ 
    public function setSlug($slug) 
    { 
     $this->slug = $slug; 

     return $this; 
    } 

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

    /** 
    * Set genre 
    * 
    * @param string $genre 
    * @return Topic 
    */ 
    public function setGenre($genre) 
    { 
     $this->genre = $genre; 

     return $this; 
    } 

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

    /** 
    * Set lastPost 
    * 
    * @param integer $lastPost 
    * @return Topic 
    */ 
    public function setLastPost($lastPost) 
    { 
     $this->lastPost = $lastPost; 

     return $this; 
    } 

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

    /** 
    * Set content 
    * 
    * @param string $content 
    * @return Topic 
    */ 
    public function setContent($content) 
    { 
     $this->content = $content; 

     return $this; 
    } 

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

    /** 
    * Set forum 
    * 
    * @param Forum $forum 
    * @return Topic 
    */ 
    /*public function setForum(\BISSAP\BodyConceptBundle\Entity\Forum $forum)*/ 
    public function setForum(Forum $forum) 
    { 
     $this->forum = $forum; 

     return $this; 
    } 

    /** 
    * Get forum 
    * 
    * @return \BISSAP\BodyConceptBundle\Entity\Forum 
    */ 
    public function getForum() 
    { 
     return $this->forum; 
    } 
    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->posts = new \Doctrine\Common\Collections\ArrayCollection(); 
    $this->dateCreation = new \DateTime(); 
    } 

    /** 
    * Add posts 
    * 
    * @param \BISSAP\ForumBundle\Entity\Post $posts 
    * @return Topic 
    */ 
    public function addPost(\BISSAP\ForumBundle\Entity\Post $posts) 
    { 
     $this->posts[] = $posts; 

     return $this; 
    } 

    /** 
    * Remove posts 
    * 
    * @param \BISSAP\ForumBundle\Entity\Post $posts 
    */ 
    public function removePost(\BISSAP\ForumBundle\Entity\Post $posts) 
    { 
     $this->posts->removeElement($posts); 
    } 

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

User.php

<?php 

namespace BISSAP\UserBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* BISSAP\UserBundle\Entity\User 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="BISSAP\UserBundle\Entity\UserRepository") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @var ArrayCollection $Topics 
    * 
    * @ORM\OneToMany(targetEntity="\BISSAP\ForumBundle\Entity\Topic", mappedBy="User", cascade={"persist", "remove", "merge"}) 
    */ 
    private $Topics; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="pseudo", type="string", length=30, nullable=true) 
    */ 
    private $pseudo; 

    /** 
    * @ORM\Column(name="name", type="string", length=255) 
    * 
    * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"}) 
    * @Assert\Length(
    *  min=3, 
    *  max=255, 
    *  minMessage="The name is too short.", 
    *  maxMessage="The name is too long.", 
    *  groups={"Registration", "Profile"} 
    *) 
    */ 
    private $name; 

    /** 
    * @ORM\Column(name="firstname", type="string", length=255) 
    * 
    * @Assert\NotBlank(message="Please enter your firstname.", groups={"Registration", "Profile"}) 
    * @Assert\Length(
    *  min=3, 
    *  max=255, 
    *  minMessage="The name is too short.", 
    *  maxMessage="The name is too long.", 
    *  groups={"Registration", "Profile"} 
    *) 
    */ 
    private $firstname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="website", type="string", length=100, nullable=true) 
    */ 
    private $website; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="avatar", type="string", length=100, nullable=true) 
    */ 
    private $avatar; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="signature", type="string", length=200, nullable=true) 
    */ 
    private $signature; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="location", type="string", length=100, nullable=true) 
    */ 
    private $location; 

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

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

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="rank", type="integer", nullable=true) 
    */ 
    private $rank; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="nb_post", type="integer", nullable=true) 
    */ 
    private $nbPost; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="nb_topic", type="integer", nullable=true) 
    */ 
    private $nbTopic; 


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

    /** 
    * Set pseudo 
    * 
    * @param string $pseudo 
    * @return User 
    */ 
    public function setPseudo($pseudo) 
    { 
     $this->pseudo = $pseudo; 

     return $this; 
    } 

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

    /** 
    * Set password 
    * 
    * @param string $password 
    * @return User 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

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

    /** 
    * Set email 
    * 
    * @param string $email 
    * @return User 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

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

    /** 
    * Set website 
    * 
    * @param string $website 
    * @return User 
    */ 
    public function setWebsite($website) 
    { 
     $this->website = $website; 

     return $this; 
    } 

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

    /** 
    * Set avatar 
    * 
    * @param string $avatar 
    * @return User 
    */ 
    public function setAvatar($avatar) 
    { 
     $this->avatar = $avatar; 

     return $this; 
    } 

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

    /** 
    * Set signature 
    * 
    * @param string $signature 
    * @return User 
    */ 
    public function setSignature($signature) 
    { 
     $this->signature = $signature; 

     return $this; 
    } 

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

    /** 
    * Set location 
    * 
    * @param string $location 
    * @return User 
    */ 
    public function setLocation($location) 
    { 
     $this->location = $location; 

     return $this; 
    } 

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

    /** 
    * Set registration 
    * 
    * @param \DateTime $registration 
    * @return User 
    */ 
    public function setRegistration($registration) 
    { 
     $this->registration = $registration; 

     return $this; 
    } 

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

    /** 
    * Set lastVisit 
    * 
    * @param \DateTime $lastVisit 
    * @return User 
    */ 
    public function setLastVisit($lastVisit) 
    { 
     $this->lastVisit = $lastVisit; 

     return $this; 
    } 

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

    /** 
    * Set rank 
    * 
    * @param integer $rank 
    * @return User 
    */ 
    public function setRank($rank) 
    { 
     $this->rank = $rank; 

     return $this; 
    } 

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

    /** 
    * Set nbPost 
    * 
    * @param integer $nbPost 
    * @return User 
    */ 
    public function setNbPost($nbPost) 
    { 
     $this->nbPost = $nbPost; 

     return $this; 
    } 

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

    /** 
    * Set nbTopic 
    * 
    * @param integer $nbTopic 
    * @return User 
    */ 
    public function setNbTopic($nbTopic) 
    { 
     $this->nbTopic = $nbTopic; 

     return $this; 
    } 

    /** 
    * Get nbTopic 
    * 
    * @return integer 
    */ 
    public function getNbTopic() 
    { 
     return $this->nbTopic; 
    } 
    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
    parent::__construct(); 
     $this->Topics = new \Doctrine\Common\Collections\ArrayCollection(); 
    $this->registration = new \DateTime(); 
    $this->lastVisit = new \DateTime(); 

    } 

    /** 
    * Add Topics 
    * 
    * @param \BISSAP\ForumBundle\Entity\Topic $topics 
    * @return User 
    */ 
    public function addTopic(\BISSAP\ForumBundle\Entity\Topic $topics) 
    { 
     $this->Topics[] = $topics; 

     return $this; 
    } 

    /** 
    * Remove Topics 
    * 
    * @param \BISSAP\ForumBundle\Entity\Topic $topics 
    */ 
    public function removeTopic(\BISSAP\ForumBundle\Entity\Topic $topics) 
    { 
     $this->Topics->removeElement($topics); 
    } 

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

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return User 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

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

    /** 
    * Set firstname 
    * 
    * @param string $firstname 
    * @return User 
    */ 
    public function setFirstname($firstname) 
    { 
     $this->firstname = $firstname; 

     return $this; 
    } 

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

Je voudrais voir la demande générée par la doctrine, mais je ne sais pas la façon de l'afficher.


donc je suis en train d'accéder à l'utilisateur pseudo avec {{ forum.topics.last.user.pseudo }}

J'obtiens l'erreur:

An exception has been thrown during the rendering of a template ("Notice: Undefined property: BISSAP\ForumBundle\Entity\Topic::$user") in BISSAPForumBundle:F:index-forum.html.twig at line 53. 

je me suis déplacé $ utilisateur par l'utilisateur $ et je reçois:

Impossible to access an attribute ("user") on a boolean variable ("") in BISSAPForumBundle:F:index-forum.html.twig at line 53 

UserRepository :: findAllOrderByCategory() n'existe pas mais

ForumRepository :: findAllOrderByCategory():

class ForumRepository extends EntityRepository 
{ 
    public function findAllOrderByCategory() 
    { 
     return $this->createQueryBuilder('p') 
        ->leftJoin('p.Category','c') 
        ->orderBy('c.ordre', 'desc') 
        ->getQuery() 
        ->getResult(); 
    } 
} 
+0

'Je voudrais voir la requête générée par Doctrine mais je ne sais pas comment l'afficher. 'Vous pouvez utiliser le profileur symfony, activé par défaut dans l'environnement de développement (' app_dev.php'). –

Répondre

1

Doctrine est paresseux objets liés à chargement par défaut, sauf si déjà chargé l'objet correspondant. L'accès à l'objet associé (c'est-à-dire echo-ing Topic.user.pseudo) devrait déclencher le chargement de l'objet complet. Voir la note à: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#joins

Si cela ne fonctionne pas, pourriez-vous ajouter une capture d'écran du message d'erreur et le contenu de votre UserRepository :: méthode findAllOrderByCategory() dans une réponse?

+1

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change – Dethariel

+0

@Leon Hagendijk => J'ai ajouté quelques informations dans une réponse ... – Bissap

+0

@Dethariel Merci pour votre ajout, gardez cela à l'esprit pour de futures réponses. –