2011-09-18 9 views
80

sto usando FOSuserbundle per iniziare con la registrazione dell'utente https://github.com/FriendsOfSymfony/FOSUserBundleAccesso alla utente connesso in un modello

li ho registrazione/login e logout. Quello che voglio fare ora è prendere i dati degli utenti registrati e presentarli su ogni pagina del mio sito. Come "Ciao username" nel tipo di intestazione di cosa.

Sembra incorporare un controllore nel mio app/Resources/views/base.html.twig è il modo migliore per farlo http://symfony.com/doc/current/book/templating.html#embedding-controllers

Così ho scritto il mio controller per accedere ai dati del profilo utente. Quello che non riesco a capire è come accedere ai metodi FOS nel mio controller incorporato. Quindi, dal mio Acme/UserBundle/Controller/UserController.php io voglio fare questo:

public function showAction() 
{ 
    $user = $this->container->get('security.context')->getToken()->getUser(); 
    if (!is_object($user) || !$user instanceof UserInterface) { 
     throw new AccessDeniedException(
       'This user does not have access to this section.'); 
    } 

    return $this->container->get('templating') 
     ->renderResponse('FOSUserBundle:Profile:show.html.'.$this->container 
     ->getParameter('fos_user.template.engine'), array('user' => $user)); 
} 

che ho afferrato da: vendor/bundle/FOS/UserBundle/Controller/ProfileController.php

risposta

205

È possibile accedere ai dati dell'utente direttamente nel modello di ramoscello senza richiedere nulla nel controller. L'utente è accessibile in questo modo: app.user.

Ora è possibile accedere a tutte le proprietà dell'utente. Ad esempio, è possibile accedere al nome utente in questo modo: app.user.username.

Attenzione, se l'utente non è registrato, app.user è nullo.

Se si desidera verificare se l'utente è registrato, è possibile utilizzare la funzione di ramoscello is_granted. Ad esempio, se si desidera verificare se l'utente ha ROLE_ADMIN, è sufficiente eseguire is_granted("ROLE_ADMIN").

Così, in ogni delle vostre pagine si può fare:

{% if is_granted("ROLE") %} 
    Hi {{ app.user.username }} 
{% endif %} 
+7

grazie. In realtà ho cambiato "RUOLO" per "IS_AUTHENTICATED_REMEMBERED" e ha funzionato benissimo. – ed209

+5

Non sto usando FOSuserbundle (a meno che non venga fornito ora), ma 'app.user.username' ha funzionato ancora per me. Potrebbe essere utile a qualcuno per sapere. –

+0

Grazie! Questo dovrebbe essere molto più chiaro nella documentazione. –

12

per symfony 2.6 e di cui sopra può usare

{{ app.user.getFirstname() }} 

come app.security variabile globale per il modello Twig è stato deprecato e verrà rimosso dal 3.0

ulteriori informazioni:

http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

e vedere le variabili globali in

http://symfony.com/doc/current/reference/twig_reference.html

+4

chiamata metodo non necessaria. Puoi usare attributi dinamici come questo '{{app.user.firstname}}'. È più front-end-dev-friendly, credo. – kacper3w

+2

Anche se sono d'accordo con il commento precedente sull'essere inutile, ho intenzione di revocare questo perché dimostra che i metodi personalizzati possono essere utilizzati se lo si desidera – Simon

-1
{{ app.user.username|default('') }}

Proprio presente nome utente login per esempio, di default la funzione di filtro ('') dovrebbe essere bello quando utente non è login per basta evitare fastidiosi messaggi di errore.

+2

e come risolve il problema? Forse è necessario aggiungere una spiegazione –