Symfony2 と doctrine 2 を使用してアプリケーションを開発しています。現在ログインしているユーザーの ID を取得する方法を知りたいです。
4 に答える
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 で削除されたことに注意してください。
以下のコードで変数を取得できます。
$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());
}