symfony2:SonataAdminbundle - 管理クラス内の現在のユーザーを表すオブジェクトをどのように取得するにはどうすればよいですか。

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

質問

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()を使用して現在のユーザーを取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top