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
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 %}
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