我试图在不知道对象结构的情况下显示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>
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下(这只是为了显示我正在尝试做的事情,但它甚至还无法正常工作):
<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>
Run Code Online (Sandbox Code Playgroud)
结果应如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
PD:这是我的第一篇文章,如果我错过了某些事情,我们深表歉意。
制作一个树枝扩展,返回您想要的字段列表,这样您就可以使用 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 %}
Run Code Online (Sandbox Code Playgroud)
修改 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 %}
Run Code Online (Sandbox Code Playgroud)
这需要将标头存储在实体的键中。对于更复杂的数组结构和更大的灵活性,可能需要树枝扩展。
要检查日期时间对象并相应地转换为字符串,您可以查看下面的线程,它也不需要扩展:
| 归档时间: |
|
| 查看次数: |
14834 次 |
| 最近记录: |