Php Symfony2变量“名称”不存在
我是Symfony的新手,所以这肯定是我这边的一个简单错误 我得到以下错误:变量worker不存在 模板如下所示:Php Symfony2变量“名称”不存在,php,symfony,twig,Php,Symfony,Twig,我是Symfony的新手,所以这肯定是我这边的一个简单错误 我得到以下错误:变量worker不存在 模板如下所示: {% extends "NTSBSServiceBundle::layout.html.twig" %} {% block body %} <h1>Rapportera</h1> {% for worker in workers if workers %} {{ worker.name }} {% else %}
{% 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,我会得到以下输出:
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 ));
您不能执行{x中i的%if x%}
你必须这样做
{% if x | length > 0 %}
{% for i in x %}
instructions
{% endfor %}
{% endif %}
使用twig doc:我总是像这样在twig中循环数组:
{% for b in books %}
{{ b.name }}
{% endfor %}
{% if not books %}
<i>{% trans %}utils.nothing{% endtrans %}</i>
{% endif %}
但您的错误似乎缺少一个变量。你的错误信息是什么?
Symfony2变量“名称”不存在
或
变量工作程序不存在。我将代码更改为那样,但问题仍然存在。确切的错误消息是:第6行的/www/sbs.ntsys.se/Symfony/src/NT/SBSServiceBundle/Resources/views/Report/index.html.twig中不存在变量工作程序。我同意你的看法,这似乎不是一个细枝问题,但我无法理解为什么缺少变量。return$this->render'AcmeDemoBundle:Welcome:index.html.twig',array'workers'=>$workers;并删除@Template注释,仍然会出现相同的错误。我已经确认,正确的模板也会使用该代码呈现。return语句现在看起来像return$this->render'NTSBSServiceBundle:Report:index.html.twig',数组'workers'=>$workers;。这里真的很奇怪,你确定它使用了正确的控制器操作吗?echoright控制器;出口在您的返回声明之前。我已使用您的示例确认它是正确的控制器。如果我打印$workers,输出如下。数组[0]=>NT\SBSServiceBundle\Entity\Worker对象[id:NT\SBSServiceBundle\Entity\Worker:private]=>2[名称:受保护]=>Worker 1[邮件:受保护]=>worker1@example.com[电话:受保护]=>123456789