动态显示树枝中的表格

时间:2014-02-04 19:17:41

标签: 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>

我想要做的事情如下(这只是为了显示我正在尝试做的事情,但它甚至没有接近工作):

<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:这是我的第一篇文章,如果我错过了什么,请道歉。

2 个答案:

答案 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对象并相应地转换为字符串,您可以查看下面不需要扩展名的线程:

Check if a variable is a date with Twig