Symfony2变量“name”不存在

时间:2013-08-25 16:34:14

标签: php symfony twig

我是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 ));

2 个答案:

答案 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”不存在。