所以我一直试图解决这个问题。
在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 %}
答案 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“不存在......”