我使用一大段代码来显示朋友,我在几个模板中使用它,所以我想把它变成一个宏,但语法是一种不寻常的方式,我不知道是否有这样的方法完成。
我要分开的代码部分是:
{% if(fr.email != null) %}
<p>
<span class ="label">Email Address: </span>
<a class="email" href="{{ path('friend_email', {'id': fr.id}) }}">
{{ fr.email }}
</a>
</p>
{% endif %}
{% if(fr.phone != null) %}
<p>
<span class="label">Phone: </span>
{{ fr.phone }}
</p>
{% endif %}
等约10个变量。在另一个模板中我使用它,但不是fr.email,fr.phone等,我需要friend.email,friend.phone ......
我试过这个但没有成功:
{% macro display_friend(fr) %}
{% if({{ fr }}.email != null) %}
<p>
<span class ="label">Email Address: </span>
<a class="email" href="{{ path('friend_email', {'id': {{ fr }}.id}) }}">
{{ {{ fr }}.email }}
</a>
</p>
{% endif %}
{% if({{ fr }}.phone != null) %}
<p>
<span class="label">Phone: </span>
{{ {{ fr }}.phone }}
</p>
{% endif %}
{% endmacro %}
如果有必要,我可以在每个模板中使用fr.email,fr.phone,fr。* ....所以也许继承可以工作?
所以我的问题是:有没有办法让这部分代码变成宏,如果是,它会更好还是继承会更好?
答案 0 :(得分:4)
在您的情况下,使用with选项,而不是使用宏我只会包含一个twig文件。例如,你可以这样做:
{% include 'AcmeDemoBundle:Demo:showFriend.html.twig' with {'fr': friend} %}
和showFriend.html.twig将是:
{% if(fr.email != null) %}
<p>
<span class ="label">Email Address: </span>
<a class="email" href="{{ path('friend_email', {'id': fr.id}) }}">
{{ fr.email }}
</a>
</p>
{% endif %}
{% if(fr.phone != null) %}
<p>
<span class="label">Phone: </span>
{{ fr.phone }}
</p>
{% endif %}
答案 1 :(得分:1)
在macro内,您可以fr.var
使用
{% if({{ fr }}.email != null) %}
将成为
{% if fr.email %}
正如您所看到的,不需要指定!= null
(我甚至怀疑它是否有用,它可能应该是fr.email not is null
)