Symfony2とdoctrine 2.を使用してアプリケーションを開発しています。現在ログインしているユーザーのIDを取得する方法を知りたいです。
現在の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で削除されたことに注意してください。
Symfony2では、次のコードでこれをより簡単に取得できます。
$id = $this->getUser()->getId();
以下のコードで変数を取得できます:
$userId = $this->get('security.context')->getToken()->getUser()->getId();
これはメソッドで服を着ることができます:
/**
* 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());
}