Symfony2 : SonataAdminBundle - 관리 클래스 내에서 현재 사용자를 나타내는 개체를 어떻게 얻을 수 있습니까?
-
23-12-2019 - |
문제
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()
를 사용하여 현재 사용자를 가져옵니다.
제휴하지 않습니다 StackOverflow