Bir şablonda oturum açmış kullanıcıya erişim


94

Kullanıcı kaydı https://github.com/FriendsOfSymfony/FOSUserBundle ile başlamak için FOSuserbundle kullanıyorum

Kayıt / giriş ve çıkış yapıyorum. Şimdi yapmak istediğim, giriş yapmış kullanıcı verilerini almak ve sitemin her sayfasında sunmak. Başlık türündeki "Merhaba kullanıcı adı" gibi.

Uygulamama / Resources / views / base.html.twig yerleştirmek , bunu yapmanın en iyi yolu gibi görünüyor http://symfony.com/doc/current/book/templating.html#embedding-controllers

Bu yüzden kullanıcı profili verilerine erişmek için denetleyicime yazdım. Anlayamadığım şey, gömülü denetleyicimdeki FOS yöntemlerine nasıl erişeceğim. Yani benim dan Acme / UserBundle / Kontrolör / UserController.php I bunu yapmak istiyor:

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

Bunlardan kaptım: vendor / bundles / FOS / UserBundle / Controller / ProfileController.php

Yanıtlar:


229

Kullanıcı verilerine, denetleyicide herhangi bir şey talep etmeden doğrudan twig şablonundan erişebilirsiniz. Kullanıcı bu gibi erişilebilir: app.user.

Artık kullanıcının her özelliğine erişebilirsiniz. Örneğin, böyle bir kullanıcı adı erişebilirsiniz: app.user.username.

Uyarı, kullanıcı oturum açmadıysa, app.userboştur.

Kullanıcının oturum is_grantedaçıp açmadığını kontrol etmek istiyorsanız, twig işlevini kullanabilirsiniz . Örneğin, kullanıcının sahip olup olmadığını kontrol etmek istiyorsanız ROLE_ADMIN, yapmanız gereken tek şey is_granted("ROLE_ADMIN").

Yani, her sayfanızda şunları yapabilirsiniz:

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

8
Teşekkürler. Aslında "IS_AUTHENTICATED_REMEMBERED" için "ROLE" ifadesini değiştirdim ve harika çalıştı.
ed209

5
FOSuserbundle kullanmıyorum (şimdi birlikte gelmedikçe) ama app.user.usernameyine de benim için çalıştı. Birinin bilmesi faydalı olabilir.
Jason Swett

1
Symfony \ Bundle \ FrameworkBundle \ Templating \ GlobalVariables, FOSUserBundle'ın bir parçası değildir, bu nedenle bu her zaman işe yarar (küresel dalların 2.5'te tanımlandığı yer burasıdır) (Jason Swett Mar 30 'ile ilgili olarak)
DerStoffel

16

Symfony 2.6 ve üstü için kullanabiliriz

{{ app.user.getFirstname() }}

olarak app.security Twig şablon için genel değişken kullanımdan kaldırıldı ve 3.0 kaldırılacak

Daha fazla bilgi:

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

ve genel değişkenleri görün

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


4
gereksiz yöntem çağrısı. Bunun gibi dinamik öznitelikleri kullanabilirsiniz {{ app.user.firstname }}. Sanırım daha ön uç geliştirici dostu.
kacper3w

2
Gereksiz olmakla ilgili yukarıdaki yorumu kabul etsem de, bunu destekleyeceğim çünkü istenirse özel yöntemlerin kullanılabileceğini gösteriyor
Simon

-1
{{uygulama.kullanıcı.kullanıcı adı | varsayılan ('')}}

Yalnızca oturum açma kullanıcı adını belirtin, örneğin, filtre işlevi varsayılanı (''), yalnızca sinir bozucu hata mesajından kaçınarak kullanıcı oturum açmadığında güzel olmalıdır.


2
ve sorunu nasıl çözüyor? Belki de açıklama eklemeniz gerekiyor
Balwinder Singh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.