动态显示树枝中的表格

gon*_*182 5 html symfony twig

我试图在不知道对象结构的情况下显示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:这是我的第一篇文章,如果我错过了某些事情,我们深表歉意。

Der*_*k F 5

制作一个树枝扩展,返回您想要的字段列表,这样您就可以使用 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)


Ric*_*d H 5

修改 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)

这需要将标头存储在实体的键中。对于更复杂的数组结构和更大的灵活性,可能需要树枝扩展。

要检查日期时间对象并相应地转换为字符串,您可以查看下面的线程,它也不需要扩展:

使用 Twig 检查变量是否为日期