97

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

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

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

4

3 に答える 3

232

コントローラで何も要求せずに、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 %}
于 2011-09-19T11:24:09.170 に答える
18

symfony 2.6以降では、

{{ app.user.getFirstname() }}

Twigテンプレートの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

于 2015-09-22T14:02:05.640 に答える
-1
{{app.user.username | default('')}}

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

于 2016-07-26T01:21:09.947 に答える