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.