【问题标题】:Symfony2 Variable "name" does not existSymfony2 变量“名称”不存在
【发布时间】:2013-08-25 16:34:14
【问题描述】:

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

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

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

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

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

    【讨论】:

    • 我将代码改成这样,但问题仍然存在。
    【解决方案2】:

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

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

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

    Symfony2 变量“名称”不存在
    或者
    变量“worker”不存在。

    【讨论】:

    • 确切的错误消息是:/www/sbs.ntsys.se/Symfony/src/NT/SBSServiceBundle/Resources/views/Report/index 中不存在变量“worker”。 html.twig 在第 6 行。我同意你的看法,这似乎不是树枝问题,但我不明白为什么缺少变量。
    • return $this->render('AcmeDemoBundle:Welcome:index.html.twig',array('workers' => $workers ));并删除 @Template() 注释
    • 仍然得到同样的错误。我已经确认正确的模板也使用该代码呈现。返回语句现在看起来像这样return $this-&gt;render('NTSBSServiceBundle:Report:index.html.twig',array( 'workers' =&gt; $workers ));
    • 这里真的很奇怪,你确定它使用了正确的控制器 - 动作吗? echo("右控制器");退出;在您的退货声明之前。
    • 我已经确认它是使用您的示例的正确控制器。如果我执行 print_r() if $workers,则输出如下。 Array ( [0] =&gt; NT\SBSServiceBundle\Entity\Worker Object ( [id:NT\SBSServiceBundle\Entity\Worker:private] =&gt; 2 [name:protected] =&gt; Worker 1 [mail:protected] =&gt; worker1@example.com [phone:protected] =&gt; 123456789 ) )
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多