Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2变量“名称”不存在_Php_Symfony_Twig - Fatal编程技术网

Php Symfony2变量“名称”不存在

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 %}

我是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,我会得到以下输出:

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