2014-01-10 52 views
1

我有一个应用程序,我一直在symfony中构建,我试图只显示用户在某个页面上的内容。我有一个if/else块(如下所示),但内容仍显示在页面上,我不知道它是什么。我这样做是错误的吗?如果else块如果在特定页面上显示内容

{% block nav %} 
    {% set uri = app.request.uri %} 
    {% if uri != 'login' %} 
     {% include "StarnesUserBundle::user-nav.html.twig" %} 
    {% endif %} 
{% endblock %} 

所以它应该是每一个页面,是不是/login页面上显示user-nav.html.twig

的。

+0

您是否使用特定的Twig文件作为登录页面? –

+0

@ n.1是的我有一个单独的树枝文件的登录。 – zachstarnes

+0

好吧,我添加了另一种解决方案,使用一个变量只在单独的文件中定义登录页面,但我不会发布它,因为其他答案适合你。 –

回答

1

的名称在登录页面的嫩枝模板定义一个变量:

{% set hide_user_nav = true %} 

添加在您的布局中测试此变量:

{% if (hide_user_nav is not defined) %} 
    {% block nav %} 
     {% include "StarnesUserBundle::user-nav.html.twig" %} 
    {% endblock %} 
{% endif %} 
+0

不幸的是,这并没有工作。这段代码位于'layout.html.twig'中,所有用户页面都扩展了这个布局。会阻止它工作吗? – zachstarnes

+0

这个dit不起作用,因为用户导航总是或永远不会显示? –

+0

它永远不会显示 – zachstarnes

1

像这样的东西应该可以做到。这是未经测试的,但应该给你一个大概的想法。

{% block nav %} 
    {% if app.request.attributes.get('_route') != 'login' %} 
     {% include "StarnesUserBundle::user-nav.html.twig" %} 
    {% endif %} 
{% endblock %} 

这里假设你的/login路由名称是login,所以只需更换login与您的路线

+1

不幸的是,路线不是这样命名的。例如,'/ login'的路由名称是'fos_user_security_login' – zachstarnes

+0

,它不起作用。导航不会显示在任何页面 – zachstarnes

0

如果登录页面扩展包含该块布局页面,那么你可以只是把空

{% block nav %}{% endblock nav %} 

,将覆盖父导航块。