我是TWIG的新手。我可以在PHP中执行此操作,但我正在寻找使用TWIG在模板中执行此操作的正确方法。
控制器代码:
public function indexAction()
{
$em = $this->getDoctrine()
->getEntityManager();
$properties = $em->getRepository('MainBundle:Property')->findAll();
return $this->render('MainBundle:Admin:index.html.twig', array(
'bmproperty' => $properties,
));
}
TWIG模板:
{% for property in bmproperty %}
<div {% if property.hasHoaLien == false %}class="nolien"{% else %}class="haslien"{% endif %}>
<ul><li><a href="{{ path('MainBundle_Property_Edit', {'id' : property.id}) }}">
{% if property.houseNumber is null %} {{ property.street }}
Lot #{{ property.lotNumber }}
{% else %}
{{ property.houseNumber }} {{ property.street }}
{% endif %}
</a>
</li><li>
{% if property.user is not empty %}
{% for user in property.user %}
{{ user.fullname }},
{% endfor %}
{% else %}
{{ property.status }}
{% endif %}
</li><li>{{ property.type }}</li>{% if property.isOccupied == true %}<li>Occupied</li>{% else %}<li>Vacant</li>{% endif %}{% if property.inArrears == true %}<li>Yes</li>{% else %}<li>No</li>{% endif %}</ul>
</div>
{% endfor %}
我的问题在于上面代码中的这段代码:
{% for user in property.user %}
{{ user.fullname }},
{% endfor %}
这一行有两个用户名,我只想尝试用逗号分隔它们,然后修剪最后一个逗号。
我是否将两个用户分配给模板中的变量然后只使用TWIG中的TRIM选项?如果是这样,我不确定如何将它们连接到TWIG模板中的单个变量。
答案 0 :(得分:2)
您不能使用非数组变量的连接。在您使用的示例中:
{{ property.user.fullname|join(',') }}
Join作为php implode函数工作,因此参数必须是数组。 fullname不是property.user的成员,但是每个属性的成员.user.0.fullname,property.user.1.fullname
要使用2个或更多字符串,可以使用〜运算符
{{ property.user.0.fullname ~', ' ~ property.user.1.fullname }}
我的方法是添加一个包含名称的变量,然后在for
之后将其内爆{% set arr ={} %
{% for key,user in property.user %}
{% set arr = arr|merge({key: user.fullname}) %}
{% endfor %}
{{ arr|join(',') }}