web-dev-qa-db-ja.com

SymfonyがユーザーIDにログインします

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

49
Haritz

現在の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で削除されたことに注意してください。

130
Jakub Zalas

Symfony2では、次のコードでこれをより簡単に取得できます。

$id = $this->getUser()->getId();
16
53iScott

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

$userId = $this->get('security.context')->getToken()->getUser()->getId();
3
webdeveloper

これはメソッドで服を着ることができます:

/**
 * 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()); 
}
0
websky