Symfony2 : SonataAdminBundle - 관리 클래스 내에서 현재 사용자를 나타내는 개체를 어떻게 얻을 수 있습니까?

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

문제

SONATA-ADMIN 번들을 사용합니다. 페이지 entity에서 사용자 (FosuserBundle)와의 관계가 있습니다. 페이지를 만드거나 변경하는 현재 사용자를 저장하고 싶습니다.

My 추측은 PostUpdate 및 Admin 클래스의 PostUpdate 및 Postpersist 메서드에서 사용자 객체를 가져 오고이 오브젝트는 setUSER 메서드에서 전송됩니다.

그러나 이것을 실현하는 방법은 무엇입니까?

Google 그룹의

를 보았습니다.
    public function setSecurityContext($securityContext) {
        $this->securityContext = $securityContext;
    }

    public function getSecurityContext() {
        return $this->securityContext;
    }

    public function prePersist($article) {
        $user = $this->getSecurityContext()->getToken()->getUser();

        $appunto->setOperatore($user->getUsername());
    }
.

그러나 이것은 작동하지 않습니다

도움이 되었습니까?

해결책

관리자 클래스에서 다음과 같이 로그인 한 사용자를 얻을 수 있습니다.

$this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser()
.

편집 피드백을 기반으로

당신은 그것을하고 있습니까?이것이 작동해야하기 때문에

 /**
     * {@inheritdoc}
     */
    public function prePersist($object)
    {

$user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser();
        $object->setUser($user);
    }

    /**
     * {@inheritdoc}
     */
    public function preUpdate($object)
    {
$user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser();
        $object->setUser($user);
    }
.

다른 팁

Symmony 2.8부터는 security.token_storage 대신 security.context를 사용하여 사용자를 검색해야합니다.생성자 인젝션을 사용하여 관리자에게 가져옵니다.

public function __construct(
    $code,
    $class,
    $baseControllerName,
    TokenStorageInterface $tokenStorage
) {
    parent::__construct($code, $class, $baseControllerName);
    $this->tokenStorage = $tokenStorage;
}
.

admin.yml :

    arguments:
        - ~
        - Your\Entity
        - ~
        - '@security.token_storage'
.

그런 다음 $this->tokenStorage->getToken()->getUser()를 사용하여 현재 사용자를 가져옵니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top