1. ホーム
  2. entity-framework

[解決済み] Symfony2で現在のユーザを表すエンティティを取得する方法は?

2022-04-30 12:16:49

質問

Symfonyのセキュリティ設定を使っています。すべてうまくいっていますが、1つの重要なことを行う方法がわかりません。

twigでは、次のようにすると現在のユーザー情報にアクセスできます。

Welcome, {{ app.user.username }}

など

これと同じ情報にControllerでアクセスするにはどうしたらよいでしょうか?具体的には、現在のユーザーエンティティを取得し、それを別のエンティティに関連付けして保存したいのです (一対一マッピング)。

本当にそうなることを望んでいました。

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

が、これではうまくいきません。これは

Symfony\Component\Security\Core\User\User

というタイプのものが欲しい。

Acme\AuctionBundle\Entity\User

というのが私の実体です...。

どのように解決するのですか?

Symfony 4+、2019+のアプローチ

symfony 4 (おそらく 3.3 も。ただし 4 でしかテストしていない) では Security サービスを オートワイヤリング をコントローラの中に入れて、このようにします。

<?php

use Symfony\Component\Security\Core\Security;

class SomeClass
{
    /**
     * @var Security
     */
    private $security;

    public function __construct(Security $security)
    {
       $this->security = $security;
    }

    public function privatePage() : Response
    {
        $user = $this->security->getUser(); // null or UserInterface, if logged in
        // ... do whatever you want with $user
    }
}


symfony 2- アプローチ

ktolis が言うように、まず最初に /app/config/security.yml .

そして

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

で十分です。

$user があなたのUser Objectです! もうクエリする必要はありません。

でプロバイダを設定する方法を確認します。 security.yml から Sf2ドキュメント をクリックし、もう一度試してみてください。

頑張ってください。