我是Symfony的新手,所以这绝对是我身边的一个简单错误。
我收到以下错误:变量“worker”不存在。
模板如下所示:
{% extends "NTSBSServiceBundle::layout.html.twig" %}
{% block body %}
<h1>Rapportera</h1>
{% for worker in workers if workers %}
{{ worker.name }}
{% else %}
<em>Det finns inga öppna protokoll för närvarande...</em>
{% endfor %}
{% endblock %}
控制器方法如下所示:
/**
* List all open protocols, grouped by worker.
*
* @Route("/", name="report")
* @Method("GET")
* @Template()
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$workers = $em->getRepository('NTSBSServiceBundle:Worker')->findAll();
return array(
'workers' => $workers,
);
}
我已经检查过,$ workers确实包含数据库中的实体。树枝被渲染。如果我删除for循环,自然会错误消息消失。
希望有人可以向我解释我做错了什么。
更新:
通过退出indexAction()确认使用了正确的控制器。如果我执行$ workers的print_r,我会得到以下输出:
Array
(
[0] => NT\SBSServiceBundle\Entity\Worker Object
(
[id:NT\SBSServiceBundle\Entity\Worker:private] => 2
[name:protected] => Worker 1
[mail:protected] => worker1@example.com
[phone:protected] => 123456789
)
[1] => NT\SBSServiceBundle\Entity\Worker Object
(
[id:NT\SBSServiceBundle\Entity\Worker:private] => 3
[name:protected] => Worker 2
[mail:protected] => worker2@example.com
[phone:protected] => 123456789
)
)
此外,我尝试通过从注释更改为使用render-method来更改渲染方法,如下所示:
return $this->render('NTSBSServiceBundle:Report:index.html.twig',array( 'workers' => $workers ));
答案 0 :(得分:0)
你做不到{% for i in x if x %}
你必须这样做
{% if x | length > 0 %}
{% for i in x %}
instructions
{% endfor %}
{% endif %}
使用twig doc:http://twig.sensiolabs.org/doc
答案 1 :(得分:0)
我总是在Twig中循环遍历数组:
{% for b in books %}
{{ b.name }}
{% endfor %}
{% if not books %}
<i>{% trans %}utils.nothing{% endtrans %}</i>
{% endif %}
但是您的错误看起来像缺少变量。你的错误信息是什么?
Symfony2变量“名称”不存在
要么
变量“worker”不存在。