1. ホーム
  2. symfony

[解決済み] テンプレート内のログインユーザーにアクセスする

2023-01-16 05:51:38

質問

FOSuserbundleを使って、ユーザー登録をしています。 https://github.com/FriendsOfSymfony/FOSUserBundle

登録/ログイン/ログアウトはできました。今やりたいことは、ログインしたユーザーのデータを取得し、サイトのすべてのページでそれを表示することです。ヘッダーに"こんにちはユーザー名"のようなものです。

の中にコントローラを埋め込んでいるように見えます。 app/Resources/views/base.html.twig にコントローラを埋め込んでいるようです。 に埋め込むのが一番良い方法だと思います。 http://symfony.com/doc/current/book/templating.html#embedding-controllers

そこで、ユーザープロファイルデータにアクセスするためのコントローラを書きました。しかし、私の組み込みコントローラでFOSメソッドにアクセスする方法がわかりません。そこで、私の Acme/UserBundle/Controller/UserController.php を参照してください。 私はこれをしたいのです。

public function showAction()
{
    $user = $this->container->get('security.context')->getToken()->getUser();
    if (!is_object($user) || !$user instanceof UserInterface) {
        throw new AccessDeniedException(
               'This user does not have access to this section.');
    }

    return $this->container->get('templating')
      ->renderResponse('FOSUserBundle:Profile:show.html.'.$this->container
      ->getParameter('fos_user.template.engine'), array('user' => $user));
}

から取ってきたものです。 vendor/bundles/FOS/UserBundle/Controller/ProfileController.php から取得しました。

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

コントローラで何もリクエストしなくても、twigテンプレートで直接ユーザーデータにアクセスすることができます。ユーザはこのようにアクセスできます : app.user .

これで、ユーザーのすべてのプロパティにアクセスできるようになりました。例えば、ユーザー名には次のようにアクセスできます。 app.user.username .

警告、ユーザがログインしていない場合は app.user はnullになります。

ユーザがログインしているかどうかを確認したい場合は is_granted twig 関数を使用します。たとえば、ユーザが ROLE_ADMIN を持っているかどうかを調べたい場合、次のようにすればよいでしょう。 is_granted("ROLE_ADMIN") .

ですから、すべてのページで、:

{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}