TWIG如何在if语句中回避实体上的未定义属性

时间:2012-11-03 22:37:56

标签: symfony logic twig

所以我一直试图解决这个问题。

在PHP中,首先说ifset($ var)和$ var ==是否足够,它不会抱怨我试图比较不存在的东西。

显然这在TWIG中还不够。

现在,为什么这不起作用?我首先运行一个if来检查是否设置了entity.container,如果它不是通过那个块。

似乎TWIG无论如何都要通过所有代码。所以,我有这个实体并不总是有一个容器(entity.container)设置,所以我应该怎么做呢?因为当我运行这段代码时,TWIG只是抱怨我有一个if语句,当entity.container不存在时我尝试使用entitiy.container.containerType。

{% if entity.container is defined %}
    {% if entity.trash == false and entity.container.containerType.name =='Module' %}
        <form action="{{ path('deleteContent', { 'id': entity.id }) }}" method="post" onsubmit="return confirm('Bekräfta att du vill radera detta innehåll? Detta går inte att ångra.')">
            {{ form_widget(delete_form) }}
            <button type="submit" style="color:red;">Radera permanent</button>
        </form>
    {% elseif entity.trash == false and entity.container.containerType.name !='Module' %}
        <form action="{{ path('deleteContent', { 'id': entity.id }) }}" method="post">
            {{ form_widget(delete_form) }}
            <button type="submit" style="color:red;">Flytta till papperskorgen</button>
        </form>
    {% elseif entity.trash == true and entity.container != null %}
        <form action="{{ path('restoreContent', { 'id': entity.id }) }}" method="post">
            {{ form_widget(delete_form) }}
            <button type="submit" style="color:red;">Återställ till ursprunglig plats</button>
        </form>
    {% else %}
        För att återställa detta innehåll måste du först välja en plats för det.
    {% endif %}
{% else %}
hehe
{% endif %}

1 个答案:

答案 0 :(得分:3)

我认为在您的情况下,entity.container is defined但未设置,可能为null。 已定义和空{或null变量之间存在差异。

因此检查了第一个if语句并允许解析内部的逻辑。

要检查是否设置了变量,您必须使用

{% if entity.container %}

或只是使用“is not null”,

{% if entity.container is not null %}

两者都应该定义变量,否则你将得到错误“Item or Object”container.whateverYouWant“for”entity“不存在......”