54

Symfony2 と doctrine 2 を使用してアプリケーションを開発しています。現在ログインしているユーザーの ID を取得する方法を知りたいです。

4

4 に答える 4

139

Symfony の現在のバージョン (Symfony 4、Symfony >=3.2)

Symfony >=3.2であるためUserInterface、実装がコントローラ アクションに直接注入されることを単純に期待できます。getId()次に、ユーザーの識別子を取得するために呼び出すことができます。

class DefaultController extends Controller
{
    // when the user is mandatory (e.g. behind a firewall)
    public function fooAction(UserInterface $user)
    {
        $userId = $user->getId(); 
    }

    // when the user is optional (e.g. can be anonymous)
    public function barAction(UserInterface $user = null) 
    {
        $userId = null !== $user ? $user->getId() : null;
    }
}

2.6 以降のすべての Symfony バージョンと同様に、セキュリティ トークン ストレージを引き続き使用できます。たとえば、コントローラーで次のようにします。

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

この回答の次の部分で言及されているショートカットは、推奨されなくなったことに注意してください。Controller::getUser()

レガシー Symfony バージョン

getUser()ユーザーにアクセスする最も簡単な方法は、ベース コントローラーを拡張し、ショートカットメソッドを使用することでした。

$user = $this->getUser();

Symfony 2.6以降、セキュリティ トークン ストレージからユーザーを取得できます。

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

Symfony 2.6より前では、代わりにセキュリティ コンテキスト サービスからトークンにアクセスできました。

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

セキュリティ コンテキスト サービスは Symfony 2 で廃止され、Symfony 3.0 で削除されたことに注意してください。

于 2012-05-10T16:18:06.250 に答える
4

以下のコードで変数を取得できます。

$userId = $this->get('security.context')->getToken()->getUser()->getId();
于 2012-11-28T11:05:27.290 に答える
0

これは、次のメソッドで処理できます。

/**
 * Get user id
 * @return integer $userId
 */
protected function getUserId()
{
    $user = $this->get('security.context')->getToken()->getUser();
    $userId = $user->getId();

    return $userId;
}

そして誘導 $this->getUserId()

public function example()
{
    print_r($this->getUserId()); 
}
于 2014-12-15T12:34:52.707 に答える