2017-06-29 1 views
1

Je reçois cette erreur et je n'arrive pas à résoudre le problème. L'idée est de lister tous les livres d'un utilisateur. le chemin lorsqu'il est appelé avec l'ID de l'utilisateur fonctionne bien, par exemple: userbooks/4. mais appelé le avec le nom d'utilisateur des utilisateurs/paul je reçois cette erreur "Impossible d'accéder à un attribut (" utilisateur ") sur une variable nulle."Impossible d'accéder à un attribut ("utilisateur") sur une variable nulle

<h2 > <a href="{{ path('userbooks',{'user' : entry.user}) }} ">{{ entry.title | title }}</a></h2>  

viewuserbookAction:

public function viewuserbooksAction($user) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $book = $em->getRepository('BookReviewBookBundle:Book')->find($user); 

    return $this->render('@BookReviewBook/Book/viewuserbooks.html.twig', 
     ['book' => $book]); 

} 

viewuserbook.html.twig

{% extends '@BookReviewBook/layout.html.twig' %} 
{% block title %}{% endblock %} 
{% block body %} 

    {% for book in book.user.entries %} 
    <h1>{{ book.title }} </h1> 
<div> 
<img class="img-valign" src="{{ asset('images/book/'~ book.path) }}" , style 
= "width:300px;height:300px;" class="img-thumbnail " /> 
<span class="text2">{{ book.author }}</span> 

{{ book.averageRating |rating }} 
</div> 
<hr class="style4"> 
<p>{{ book.summary|nl2br }} </p> 
<p><small>Posted by {{ book.user }} on {{ book.timestamp|date('H:i d/m/y') }} 
</small> 
</p> 
<hr class="style4"> 

{% endfor %} 

routing.yml

userbooks: 
    path: /userbooks/{user} 
    defaults: { _controller: BookReviewBookBundle:User:viewuserbooks } 

    view: 
    path: /view/{id} 
    defaults: { _controller: BookReviewBookBundle:Book:view } 
    requirements: 
     id: \d+ 
+0

C'est probablement parce que votre entité de livre a une connexion à l'utilisateur via l'ID et non via le nom d'utilisateur. –

+0

Il y a beaucoup de variables 'user' dans votre fragment de code. Où est exactement celui qui cause cette erreur? – DonCallisto

+0

@DonCallisto ce chemin {{path ('userbooks', {'user': entry.user})}} pointe vers la variable de nom d'utilisateur. Il est possible de le changer pour pointer sur l'ID utilisateur à la place? – Suleiman

Répondre

0

Merci à tous pour la réponse et l'aide. Fonctionne parfaitement maintenant. a dû trouver par nom d'utilisateur

viewuserbookAction:

public function viewuserbooksAction($username) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $book = $em->getRepository('UserBundle:User')->find($username); 

    return $this->render('@BookReviewBook/Book/viewuserbooks.html.twig', 
     ['user' => $book]); 

} 

viewuserbook.html.twig

{% extends '@BookReviewBook/layout.html.twig' %} 
{% block title %}{% endblock %} 


{% block body %} 


{% for book in user.entries %} 
<h1>{{ book.title }} </h1> 
<div> 
<img class="img-valign" src="{{ asset('images/book/'~ book.path) }}" , 
    style 
    = "width:300px;height:300px;" class="img-thumbnail " /> 
<span class="text2">{{ book.author }}</span> 

    {{ book.averageRating |rating }} 
    </div> 
    <hr class="style4"> 
    <p>{{ book.summary|nl2br }} </p> 
    <p><small>Posted by {{ book.user }} on {{ book.timestamp|date('H:i d/m/y') 
    }} 
    </small> 
    </p> 

    {% endfor %} 

    {% endblock %} 

routing.yml

userbooks: 
    path: /userbooks/{username} 
    defaults: { _controller: BookReviewBookBundle:User:viewuserbooks } 

index.html.twig

<h2 > <a href="{{ path('userbooks',{ username : entry.user.id}) }} ">{{ 
    entry.title | title }}</a></h2>