37

FOSUserBundle を使用してユーザーを認証しています。

コントローラー内のユーザー オブジェクトを取得して旅行を登録しようとしています。保存する前に、この旅行にユーザー オブジェクトを追加する必要があります。

symfony docで見つけた次の方法のため、その方法が見つかりませんでした:

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

ユーザー名を文字列としてレンダリングしますが、オブジェクト全体が必要です。

現在、この方法を使用していますが、正しく機能していません。

$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

どうすればこれを正しく行うことができますか?

4

8 に答える 8

15

メソッドのドキュメントには、次のgetUserことが示されています。

__toString()を実装するオブジェクトを返すか、プリミティブ文字列を返します。

ここFOS\UserBundle\Model\Userクラス(FOSUserBundleで使用される基本ユーザークラス)を見ると、実際にメソッドがあることがわかります。__toString

public function __toString()
{
    return (string) $this->getUsername();
}

実際にオブジェクトを取得すると思いますUserが、メソッドを実装しているため__toString、テンプレートで直接レンダリングできます。

Twigでは、次を使用できます。

{{ dump(user) }}

あなたが持っているオブジェクトの種類を確認します。しかし、実際には文字列ではなくオブジェクトを使用しています。

于 2012-09-30T18:34:31.693 に答える
2

私は同じ問題を抱えていました。それを解決するには、使用セクションに FOS クラスを追加します。

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Model\UserInterface;
于 2014-03-05T13:07:52.723 に答える
0

FOSUser ^1.3 の場合、次のように BaseController を拡張するコントローラー内から現在のユーザーを取得できます。

$user = $this->container->get('security.token_storage')->getToken()->getUser();
于 2017-09-30T05:57:45.950 に答える