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