Symfony 细枝中的实体打印循环
我正在尝试制作一个动态细枝模板来打印具有不同字段数的实体列表。关键是我无法打印Symfony 细枝中的实体打印循环,symfony,twig,entity,Symfony,Twig,Entity,我正在尝试制作一个动态细枝模板来打印具有不同字段数的实体列表。关键是我无法打印$lligues的所有列 我的控制器如下所示: /** * @Route("/llistarlliga",name="llistar_lliga") */ public function llistarLliga(){ $repository = $this->getDoctrine()->getRepository('AppBundle:Lliga');
$lligues
的所有列
我的控制器如下所示:
/**
* @Route("/llistarlliga",name="llistar_lliga")
*/
public function llistarLliga(){
$repository = $this->getDoctrine()->getRepository('AppBundle:Lliga');
$camps = array('Nom','Nº equips','Accions');
$lligues = $repository->findAll();
return $this->render('templates/list.html.twig', array('camps' => $camps, 'lligues' => $lligues,
'title' => 'Llistat de lligues'));
}
细枝模板:
{# app/Resources/views/forms/lista.html.twig #}
{% extends "templates/home.html.twig" %}
{% block title %}
{{title}}
{% endblock %}
{% block body %}
<table>
<thead>
{% for i in 0..camps|length-1 %}
<th>{{camps[i]}}</th>
{% endfor %}
</thead>
<tbody>
{% for lliga in lligues %}
<tr>
<td>{{lliga.nom}}</td>
<td>{{lliga.numequips}}</td>
<td>
<a href="{{ path('borrar_lliga', {'nom' : lliga.nom}) }}"><img src="{{ asset('images/bin.png') }}" /></a>
<a href="{{ path('modificar_lliga', {'nom' : lliga.nom}) }}"><img src="{{ asset('images/edit.png') }}" /></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{{#app/Resources/views/forms/lista.html.twig}
{%extends“templates/home.html.twig”%}
{%block title%}
{{title}}
{%endblock%}
{%block body%}
{0..camps中的i为%length-1%}
{{camps[i]}
{%endfor%}
{lligues%中的lliga的百分比}
{{lliga.nom}}
{{lliga.numequips}
{%endfor%}
{%endblock%}
所以,我想改变第二个循环(对于lliga中的LLIGUE),使其成为动态的,所以如果它有更多或更少的字段,它也会打印它们
谢谢大家 您可以创建一个细枝过滤器
cast\u to\u数组
首先,您需要创建自定义过滤器。大概是这样的:
并将其添加到您的app\config\services.yml
:
最后,在细枝模板中使用自定义过滤器:
{{#app/Resources/views/forms/lista.html.twig}
{%extends“templates/home.html.twig”%}
{%block title%}
{{title}}
{%endblock%}
{%block body%}
{0..camps中的i为%length-1%}
{{camps[i]}
{%endfor%}
{lligues%中的lliga的百分比}
{键为%,lliga中的值|将_转换为_数组%}
{{value}}
{%endfor%}
{%endfor%}
{%endblock%}
我相信这可以奏效 你所说的“如果它有更多或更少的字段”是什么意思?一个实体的字段怎么可能比同一类的另一个实体的字段少呢?我的意思是,我想让那个细枝显示我所有的实体。所以我的利加实体有2个场,我的装备实体有8个场,我的Jugador实体有10个场。我只想使用一个唯一的模板。我现在解释我自己了吗?对不起,你试过
{%for equipment in lligues.equipms%}
然后{{equipm.nom}}
吗?Twig可以遍历你的实体,如果你不想到处都有N+1问题,你需要考虑的唯一一件事就是获取并加入所有这些实体。好的,我现在明白了。不幸的是,我不知道如何实现这一点。@hasumedic这不是重点,我只想有一个可以覆盖所有实体的动态模板。我不明白在我的情况下这是怎么回事,但是谢谢你的帮助!我现在不能试试。明天早上我会试试看,然后贴出来怎么样!非常感谢你!上面写着未知的“向数组投射”过滤器。。。有什么想法吗?我的错,我假设默认情况下过滤器已经存在。但事实上,我在我的代码库中有一个自定义过滤器。自定义筛选器基于。我将编辑我的答案以反映过滤器的创建。实际上,别担心!老实说,我会为每个实体制作不同的模板,这样会更快,因为我必须在明天之前完成这个项目!非常感谢你!嗯,我已经添加了:)其他用户可以在将来使用它,如果它适合他们的情况。
namespace AppBundle\Twig;
class ArrayExtension extends \Twig_Extension
{
/**
* @inheritDoc
*/
public function getFilters()
{
return array(
new \Twig_SimpleFilter('cast_to_array', array($this, 'castToArray'))
);
}
public function castToArray($stdClassObject) {
$response = array();
foreach ($stdClassObject as $key => $value) {
$response[] = array($key, $value);
}
return $response;
}
/**
* Returns the name of the extension.
*
* @return string The extension name
*/
public function getName()
{
return 'array_extension';
}
}
services:
app.twig_extension:
class: AppBundle\Twig\ArrayExtension
public: false
tags:
- { name: twig.extension }