템플릿에서 로그인 한 사용자 액세스


94

사용자 등록을 시작하기 위해 FOSuserbundle을 사용하고 있습니다. https://github.com/FriendsOfSymfony/FOSUserBundle

등록 / 로그인 및 로그 아웃했습니다. 지금하고 싶은 것은 로그인 한 사용자 데이터를 가져와 내 사이트의 모든 페이지에 표시하는 것입니다. 헤더 유형의 "Hi username"처럼.

app / Resources / views / base.html.twig에 컨트롤러를 포함하는 것이 http://symfony.com/doc/current/book/templating.html#embedding-controllers 를 수행하는 가장 좋은 방법 인 것 같습니다 .

그래서 사용자 프로필 데이터에 액세스하기 위해 컨트롤러를 작성했습니다. 내가 알아낼 수없는 것은 내 임베디드 컨트롤러에서 FOS 메서드에 액세스하는 방법입니다. 그래서 내 Acme / UserBundle / Controller / UserController.php에서 이렇게하고 싶습니다.

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

내가 가져온 : vendor / bundles / FOS / UserBundle / Controller / ProfileController.php

답변:


229

컨트롤러에서 아무것도 요청하지 않고 twig 템플릿에서 직접 사용자 데이터에 액세스 할 수 있습니다. 사용자는 다음과 같이 액세스 할 수 있습니다 app.user.

이제 사용자의 모든 속성에 액세스 할 수 있습니다. 예를 들어 다음과 같은 사용자 이름에 액세스 할 수 있습니다 app.user.username.

경고, 사용자가 기록되지 않은 경우 app.user는 null입니다.

사용자가 로그인되어 있는지 확인하려면 is_grantedtwig 기능을 사용할 수 있습니다 . 예를 들어, 사용자가을 가지고 있는지 확인하려면 ROLE_ADMIN을 수행하면 is_granted("ROLE_ADMIN")됩니다.

따라서 모든 페이지에서 다음을 수행 할 수 있습니다.

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

8
감사. 실제로 "IS_AUTHENTICATED_REMEMBERED"에 대한 "ROLE"을 변경했으며 훌륭하게 작동했습니다.
ed209

5
나는 FOSuserbundle을 사용하지 않지만 (지금 제공되지 않는 한) app.user.username여전히 나를 위해 일했습니다. 누군가가 알면 유용 할 수 있습니다.
Jason Swett

1
Symfony \ Bundle \ FrameworkBundle \ Templating \ GlobalVariables는 FOSUserBundle의 일부가 아니므로 이것이 항상 작동하는 이유입니다 (여기서는 나뭇 가지 Globals가 2.5에서 정의 됨) (Jason Swett와 관련하여 3 월 30 일 ')
DerStoffel

16

심포니 2.6 이상에서는 다음을 사용할 수 있습니다.

{{ app.user.getFirstname() }}

app.security 나뭇 가지 템플릿 글로벌 변수는 사용되지 않으며 3.0에서 제거됩니다

더 많은 정보:

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

전역 변수를 확인하십시오.

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


4
불필요한 메서드 호출. 이와 같은 동적 속성을 사용할 수 있습니다 {{ app.user.firstname }}. 내가 생각하기에 프론트 엔드 개발자에게 더 친숙합니다.
kacper3w

2
불필요한 것에 대한 위의 의견에 동의하지만 원하는 경우 사용자 지정 메서드를 사용할 수 있음을 보여주기 때문에 이것을 찬성 할 것입니다
Simon

-1
{{ . 사용자 . 사용자 이름 | 기본값 ( '' ) }} 

예를 들어 로그인 사용자 이름을 제시하면 성가신 오류 메시지를 피하여 사용자가 로그인하지 않을 때 필터 함수 default ( '')가 좋습니다.


2
문제를 어떻게 해결합니까? 아마 당신은 설명을 추가 할 필요가
Balwinder 싱
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.