심포니2:FOSUserBundle을 사용할 때 컨트롤러 내부에서 사용자 개체를 가져오는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/12656388

  •  11-12-2019
  •  | 
  •  

문제

내 사용자를 인증하기 위해 FOSUserBundle을 사용하고 있습니다.

저장하기 전에 이 여행에 사용자 개체를 추가해야 하는 여행을 등록하기 위해 컨트롤러 내부의 사용자 개체를 가져오려고 합니다.

Symfony 문서에서 찾은 다음 방법 때문에 그렇게 하는 방법을 찾지 못했습니다.

$user = $this->container->get('security.context')->getToken()->getUser();

사용자 이름을 문자열로 렌더링하지만 전체 개체가 필요합니다.

현재 이 방법을 사용하고 있는데 제대로 작동하지 않습니다.

$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

어떻게 하면 올바르게 할 수 있나요?

도움이 되었습니까?

해결책

나는 라몬 가 맞다고 생각합니다.이미 사용자 객체가 있습니다.

또한 Symfony> 2.1.x에서 를 사용할 수 있습니다.

$this->getUser();
.

컨트롤러 내부.

다른 팁

generacodicicetagcode 메서드에 대한 설명서는 다음을 나타냅니다.

__tostring ()을 구현하거나 기본 문자열을 구현하는 객체를 반환합니다.

에서 getUser 클래스를 보면 여기를 참조하십시오 (기본 사용자 클래스FosuserBundle에서 사용됨) 우리는 실제로 FOS\UserBundle\Model\User 메소드를 가지고 있음을 알 수 있습니다.

public function __toString()
{
    return (string) $this->getUsername();
}
.

실제로 __toString 객체를 가져 오지 만 Templates에서 직접 렌더링 할 수있는 User 메서드를 구현하기 때문입니다.

나뭇 가지에서 다음을 사용할 수 있습니다 :

{{ dump(user) }}
.

어떤 종류의 물체를 볼 수 있는지 확인하십시오.그러나 당신은 실제로 문자열이 아닌 객체를 사용하고 있습니다.

해결책 :

$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->findUserByUsername($this->container->get('security.context')
                    ->getToken()
                    ->getUser())
.

FOSUser 1.3에서는 직접 전화를 걸 수 없습니다. $this->getUser SecurityController에서.

전화를 하셔야 해요 $this->container->get('security.context')->getToken()->getUser();

그리고 이것은 사용자 개체에 액세스하기에 충분합니다.전화할 필요 없어 $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

게다가 당신의 find 메소드는 객체를 인수로 기다리지 않기 때문에 초기 $username 객체를 자동으로 암시적으로 문자열로 캐스팅합니다.

i가 동일한 문제를 해결하기 위해 사용법 섹션에서 FOS 클래스를 추가합니다. I.E :

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Model\UserInterface;
.

FOSUSER ^ 1.3에서는 현재 사용자를 다음과 같이 확장하는 컨트롤러 내부에서 현재 사용자를 얻을 수 있습니다.

$user = $this->container->get('security.token_storage')->getToken()->getUser();
.

public function indexAction()
{
    /* @var $user \FOS\UserBundle\Model\UserInterface */
    if ($user = $this->getUser())
    {
        echo '<pre>';
        print_r($user);
        print_r($user->getRoles()); // method usage example

        exit;

        return $this->redirectToRoute('dashboard');
    }

    return $this->redirectToRoute('login');
}
.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top