2011-09-18 18 views
80

Używam FOSuserbundle zacząć z rejestracją użytkownika https://github.com/FriendsOfSymfony/FOSUserBundleDostęp zalogowanego użytkownika w szablonie

Mam to rejestracji/logowaniu i na zewnątrz. Teraz chcę pobrać dane zalogowanych użytkowników i zaprezentować je na każdej stronie mojej witryny. Jak "Hi username" w nagłówku typu rzeczy.

Wydaje się, że osadzanie kontroler w moim app/Resources/views/base.html.twig jest najlepszym sposobem, aby to zrobić http://symfony.com/doc/current/book/templating.html#embedding-controllers

Więc napisałem mój kontroler dostępu do danych profilu użytkownika. Nie mogę się dowiedzieć, jak uzyskać dostęp do metod FOS w moim sterowniku osadzonym. Więc z mojego Acme/UserBundle/Controller/UserController.php chcę to zrobić:

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)); 
} 

który złapałem od: sprzedawca/pakiety/FOS/UserBundle/Controller/ProfileController.php

Odpowiedz

205

Możesz uzyskać dostęp do danych użytkownika bezpośrednio w szablonie gałązki bez żądania niczego w kontrolerze. Użytkownik jest dostępny w następujący sposób: app.user.

Teraz możesz uzyskać dostęp do każdej właściwości użytkownika. Na przykład możesz uzyskać dostęp do nazwy użytkownika w następujący sposób: app.user.username.

Ostrzeżenie, jeśli użytkownik nie jest zalogowany, app.user ma wartość NULL.

Jeśli chcesz sprawdzić, czy użytkownik jest zalogowany, możesz użyć funkcji gałązki is_granted. Na przykład, jeśli chcesz sprawdzić, czy użytkownik ma ROLE_ADMIN, wystarczy wykonać is_granted("ROLE_ADMIN").

Tak, w każdym ze swoich stron, które można zrobić:

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

dzięki. Zmieniłem "ROLE" na "IS_AUTHENTICATED_REMEMBERED" i zadziałało świetnie. – ed209

+5

Nie używam FOSuserbundle (chyba że teraz jest dostępny), ale 'app.user.username' nadal pracował dla mnie. Może ci się przydać, żeby ktoś to wiedział. –

+0

Dzięki! To powinno być znacznie jaśniejsze w dokumentacji. –

12

Dla symfony 2.6 i wyżej możemy użyć

{{ app.user.getFirstname() }} 

jako app.security globalną zmienną do szablonu Twig został wycofany i zostanie usunięty z 3.0

więcej informacji:

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

i zobaczyć zmienne globalne w

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

+4

niepotrzebne wywołanie metody. Możesz używać atrybutów dynamicznych, takich jak ta '{{app.user.firstname}}'. Sądzę, że jest bardziej przyjazny dla front-end-dev. – kacper3w

+2

Mimo, że zgadzam się z powyższym komentarzem na temat niepotrzebności, zamierzam go upvote, ponieważ pokazuje, że niestandardowe metody mogą być stosowane, jeśli tak pożądane – Simon

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

Wystarczy obecnego logowania nazwę użytkownika, na przykład, domyślnie funkcję filtra („”) powinno być miło, gdy użytkownik nie jest logowania po prostu unikaj denerwujących komunikatów o błędach.

+2

i jak rozwiązuje problem? Być może musisz dodać wyjaśnienie –

Powiązane problemy