0

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

2 回答 2

0

你不能做{% for i in x if x %} 你必须做

{% if x | length > 0 %}
  {% for i in x %}
    instructions
  {% endfor %}
{% endif %}

使用树枝文档:http ://twig.sensiolabs.org/doc

于 2013-08-25T16:38:16.967 回答
0

我总是像这样循环遍历 Twig 中的数组:

{% for b in books %}
    {{ b.name }}
{% endfor %}
{% if not books %}
    <i>{% trans %}utils.nothing{% endtrans %}</i>
{% endif %}

但是您的错误看起来像缺少一个变量。你的错误信息是什么?

Symfony2 变量“name”不存在

变量“worker”不存在。

于 2013-08-25T17:27:14.010 回答