Html 用细枝动态显示表格

Html 用细枝动态显示表格,html,symfony,twig,Html,Symfony,Twig,我试图在不知道对象结构的情况下显示用户对象中的所有用户(因此我可以使用同一个表来显示其他对象集合) 这就是它“静态”的外观: <table> <tr> <td>id</td> <td>username</td> </tr> {% for item in entities %} <tr> <td>

我试图在不知道对象结构的情况下显示用户对象中的所有用户(因此我可以使用同一个表来显示其他对象集合)

这就是它“静态”的外观:

<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>

身份证件
用户名
{实体%%中的项的百分比}
{{item.id}
{{item.username}
{%endfor%}
我想做的事情如下(这只是为了显示我正在尝试做的事情,但它甚至不接近工作):


{%用于实体中的属性\标题。项[0]}
{{property_title}}
{%endfor%}
{实体%%中的项的百分比}
{项%中的属性为%1}
{{property.value}}
{%endfor%}
{%endfor%}
结果应如下所示:

<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>

身份证件
用户名
1.
麦克风123
2.
耶稣会2

PD:这是我的第一篇文章,如果我遗漏了什么,请道歉。

制作一个小枝扩展,返回所需字段的列表,这样您就可以使用php获取字段。然后使用twig的属性函数

{{attribute(object,fields)}}调用对象上的getter

文件:

例如:

{% 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 %}
{%set temp=entities | first%}
{%set-fields=getObjectFields(临时)%}
{字段%]中的属性\标题的百分比}
{{property_title}}
{%endfor%}
{实体%%中的项的百分比}
{字段%中的字段为%1}
{{属性(项,字段)}
{%endfor%}
{%endfor%}

修改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 %}
{%set temp=entities | first%}
{temp | keys%}中属性_标题的%
{{property_title}}
{%endfor%}
{实体%%中的项的百分比}
{temp | keys%}中字段的%
{{属性(项,字段)}
{%endfor%}
{%endfor%}
这需要将头存储在实体的键中。对于更复杂的阵列结构和更大的灵活性,可能需要一个细枝扩展

要检查datetime对象并相应地转换为字符串,您可以查看下面不需要扩展名的线程:


还有什么不起作用呢?他显然想在只包含相同类型对象的泛型集合中循环对象的所有(public?)属性和/或getter方法。。。但是他不知道如何获得他们的名字(和计数)来创建循环。没有细枝过滤器/函数可以直接获取这些信息,但有一些变通方法……你知道了。谢谢你的解释。为了便于解释,我只是根据我认为它可以如何工作来编写代码。请注意,细枝允许执行item.username,即使username是私有/受保护的。但不确定它是否有区别。是的,它确实有区别,细枝直到尝试首先访问属性(即
$property
)。。。如果这不起作用(即,由于财产是私有的/受保护的)。。。使用
符号时,尝试调用相应的getter方法
getProperty()
。因此,
user.name
确实会失败,
$name
是私有/受保护的,并且没有
getName()
function.some。我会试试,让你知道!好啊所以我在那里测试了它和它的类型。我会发布完整的解决方案,一旦我有它。我遇到的问题是{attribute(item,property)}}只适用于string和int。当有一个日期或对另一个对象的引用时,它就会爆炸。任何建议?日期错误(ContextErrorException:可捕获致命错误:类DateTime的对象无法转换为字符串)引用错误(ContextErrorException:可捕获致命错误:类代理ABC的对象无法转换为字符串)创建另一个名为sanitize的细枝扩展或过滤器,并让它检查值是否为date time,如果为datetime,则返回格式化字符串date,否则返回值givenYup。是的。在进行一些小的清理之前,我现在可以完成这项工作了。很高兴看到细枝扩展是如何工作的。最终我意识到这个解决方案对于我的使用是不现实的,我将按照最初的方式为每个实体创建一个表。我没有足够的代表分数,但这是正确的答案。一旦我获得足够的分数,我就会回来。
{% 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 %}