symfony2:SonataAdminbundle - 管理クラス内の現在のユーザーを表すオブジェクトをどのように取得するにはどうすればよいですか。
-
23-12-2019 - |
質問
Sonata管理バンドルを使用します。 ユーザー(FosuserBundle)とPageEntityに関係があります。 ページを作成または変更する現在のユーザーを保存したいです。
私の推測は、管理クラスの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);
}
. 他のヒント
Symfony 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