根据现有会话更改Twig内容

时间:2015-03-17 13:55:58

标签: symfony dynamic twig

目前我正在研究Symfony网络项目。目前,我有一个layout.html.twig文件,用于设置导航栏并通过任何其他.html.twig文件进行扩展。

最近我实现了一个用户登录区域。现在我想动态更改该导航栏的内容,具体取决于是否登录。由于我无法在.html.twig文件中直接编写php代码,因此无法访问会话变量。

实现这一目标的最佳做法是什么?

提前致谢!

3 个答案:

答案 0 :(得分:0)

首先通过控制器将会话变量发送到你的html.twig:

public function mySiteAction(){
  $session = new Session();
  $yourVariable = $session->get('yourVariable');
  return array('sessionValue' => $yourVariable);
}

比你用树枝访问它: mySite.html.twig

<html>
    <head>
    </head>
    <body>
        <div id="navbar">
        {{ sessionValue }}
        </div>
    </body>
</html>

该程序的快捷方式是

{% set element = app.session.get('elem_name') %}

了解更多信息 - &gt;见Twig Documentation 此解决方案预先假定您首先登录并转到仅登录用户的页面。

答案 1 :(得分:0)

在树枝中你可以检查用户状态,如

{% if app.user %}
  <div class="loggedInNav"></div>
{% else %}
  <div class="notLoggedInNav"></div>
{% endif %}

答案 2 :(得分:0)

您可以像Rubinum那样从控制器传递特定变量,或者您可以直接在这样的树枝中访问用户。

{% if app.user %}
   # user is logged in
{% else %}
   # user is not logged in
{% endif %}