我是 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
)
)
我还尝试通过从注释更改为使用渲染方法来更改渲染方法,如下所示:
return $this->render('NTSBSServiceBundle:Report:index.html.twig',array( 'workers' => $workers ));