テンプレートでログインしたユーザーにアクセスする


94

ユーザー登録を始めるためにFOSuserbundleを使用していますhttps://github.com/FriendsOfSymfony/FOSUserBundle

登録/ログイン/ログアウトしました。私が今したいのは、ログインしているユーザーのデータを取得して、サイトのすべてのページに表示することです。ヘッダータイプの「Hi username」のように。

私の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

回答:


229

コントローラーで何も要求せずに、twigテンプレートでユーザーデータに直接アクセスできます。ユーザーはそのようにアクセスできますapp.user

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

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

ユーザーがログインしているかどうかを確認する場合は、is_grantedtwig関数を使用できます。たとえば、ユーザーがを持っているかどうかを確認する場合はROLE_ADMIN、実行するだけですis_granted("ROLE_ADMIN")

だから、あなたができるすべてのページで:

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

8
ありがとう。私は実際に「ROLE」を「IS_AUTHENTICATED_REMEMBERED」に変更しました。
ed209、2011

5
私はFOSuserbundleを使用していませんが(それが付属していない限り)、app.user.usernameまだ機能しています。誰かが知っていると役に立つかもしれません。
Jason Swett、2012年

1
Symfony \ Bundle \ FrameworkBundle \ Templating \ GlobalVariablesはFOSUserBundleの一部ではないため、これは常に機能します(これは、twig Globalsが2.5で定義されている場所です)(Jason Swett Mar 30 'に関して)
DerStoffel

16

symfony 2.6以降では、次を使用できます

{{ app.user.getFirstname() }}

app.security小枝テンプレートのグローバル変数は廃止され、3.0から削除されます

より詳しい情報:

http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

でグローバル変数を確認してください

http://symfony.com/doc/current/reference/twig_reference.html


4
不要なメソッド呼び出し。このような動的属性を使用できます{{ app.user.firstname }}。それは私が推測するよりフロントエンドの開発者フレンドリーです。
kacper3w

2
不要であるという上記のコメントには同意しますが、必要に応じてカスタムメソッドを使用できることを示しているため、これに賛成します
Simon

-1
{{ アプリユーザーユーザー名| デフォルト'' }} 

たとえば、ログインユーザー名を提示するだけです。ユーザーがログインしていない場合は、迷惑なエラーメッセージを回避するだけで、フィルター関数のdefault( '')が適切になります。


2
そしてそれはどのように問題を解決しますか?おそらく、説明を追加する必要があるかもしれません
Balwinder Singh 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.