我试图在不知道对象结构的情况下显示User对象中的所有用户(因此我也可以使用同一个表来显示其他对象集合。)
这就是“静态”的样子:
<table>
<tr>
<td>id</td>
<td>username</td>
</tr>
{% for item in entities %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.username }}</td>
</tr>
{% endfor %}
</table>
我想要做的事情如下(这只是为了显示我正在尝试做的事情,但它甚至没有接近工作):
<table>
<tr>
{% for property_title in entities.item[0] %}
<td>{{ property_title }}</td>
{% endfor %}
</tr>
{% for item in entities %}
<tr>
{% for property in item %}
<td>{{ property.value }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
结果应如下所示:
<table>
<tr>
<td>id</td>
<td>username</td>
</tr>
<tr>
<td>1</td>
<td>Mike123</td>
</tr>
<tr>
<td>2</td>
<td>jesica2</td>
</tr>
</table>
PD:这是我的第一篇文章,如果我错过了什么,请道歉。
答案 0 :(得分:4)
制作一个枝条扩展名,返回您想要的字段列表,这样您就可以使用php来获取字段。之后使用twig的属性函数
{{attribute(object,fields)}}调用对象上的getter
文档:
http://symfony.com/doc/current/cookbook/templating/twig_extension.html http://twig.sensiolabs.org/doc/functions/attribute.html
示例:
{% set temp = entities|first %}
{% set fields = getObjectFields(temp) %}
<tr>
{% for property_title in fields %}
<td>{{ property_title }}</td>
{% endfor %}
</tr>
{% for item in entities %}
<tr>
{% for field in fields %}
<td>{{ attribute(item, field) }}</td>
{% endfor %}
</tr>
{% endfor %}
答案 1 :(得分:1)
修改Derick F的答案,为简单起见,您可以使用键来获取字段名称,而不是使用树枝扩展名。下面的答案不要求在扩展类中设置'fields'变量。
{% set temp = entities|first %}
<tr>
{% for property_title in temp|keys %}
<td>{{ property_title }}</td>
{% endfor %}
</tr>
{% for item in entities %}
<tr>
{% for field in temp|keys %}
<td>{{ attribute(item, field) }}</td>
{% endfor %}
</tr>
{% endfor %}
这要求标头存储在实体的密钥中。对于更复杂的阵列结构和更大的灵活性,可能需要延长枝条。
要检查datetime对象并相应地转换为字符串,您可以查看下面不需要扩展名的线程: