wake-up-neo.com

Zugreifen auf den angemeldeten Benutzer in einer Vorlage

Ich verwende FOSuserbundle, um mit der Benutzerregistrierung zu beginnen https://github.com/FriendsOfSymfony/FOSUserBundle

Ich muss mich registrieren/einloggen und wieder abmelden. Ich möchte jetzt die Daten der angemeldeten Benutzer erfassen und auf jeder Seite meiner Website präsentieren. Wie "Hallo Benutzername" in der Kopfzeile Art der Sache.

Es scheint, als ob das Einbetten eines Controllers in meine App/Resources/views/base.html.twig der beste Weg ist, dies zu tun http: //symfony.com/doc/current/book/templating.html#embedding-controllers

Also schrieb ich meinen Controller, um auf die Benutzerprofildaten zuzugreifen. Was ich nicht herausfinden kann, ist, wie ich auf FOS-Methoden in meinem eingebetteten Controller zugreifen kann. Also aus meiner Acme/UserBundle/Controller/UserController.php möchte ich das machen:

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

was ich von: vendor/bundles/FOS/UserBundle/Controller/ProfileController.php gepackt habe

92
ed209

Sie können direkt in der Vorlage twig) auf Benutzerdaten zugreifen, ohne etwas in der Steuerung anzufordern. Auf den Benutzer kann folgendermaßen zugegriffen werden: app.user.

Jetzt können Sie auf alle Eigenschaften des Benutzers zugreifen. Sie können beispielsweise folgendermaßen auf den Benutzernamen zugreifen: app.user.username.

Warnung: Wenn der Benutzer nicht angemeldet ist, ist app.user Null.

Wenn Sie überprüfen möchten, ob der Benutzer angemeldet ist, können Sie die Funktion is_granted twig) verwenden. Wenn Sie beispielsweise überprüfen möchten, ob der Benutzer ROLE_ADMIN müssen Sie nur is_granted("ROLE_ADMIN") ausführen.

So können Sie auf jeder Ihrer Seiten Folgendes tun:

{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}
227
egeloen

Für Symfony 2.6 und höher können wir verwenden

{{ app.user.getFirstname() }}

as app.security Globale Variable für Twig template ist veraltet und wird es tun von 3.0 entfernt werden

mehr Info:

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

und sehen Sie die globalen Variablen in

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

13
Hahn