【问题标题】:Symfony2/Twig: Error on conditionally renderSymfony2/Twig:有条件渲染时出错
【发布时间】:2016-01-15 08:20:52
【问题描述】:

如果它在控制器的渲染调用中定义,我正在尝试在树枝模板上渲染表单。比如:

{% if form_to_be_rendered is defined %}
   {{ form(form_to_be_rendered) }}
{% endif }

如果控制器的渲染调用包含form_to_be_rendered 的var,则一切运行良好,并且表单被渲染。但是如果我尝试在没有这个参数的情况下渲染模板,Twig 会抛出一个 RuntimeError 指示 form_to_be_rendered 变量未定义。

Variable "form_to_be_rendered" does not exist in BundleName:Path/to/template:template.html.twig at line 3
500 Internal Server Error - Twig_Error_Runtime

我尝试将它作为空值传递并is not null 检查条件,但它也失败了。

我把这个转储放在模板上:

{% dump reset_password_form is defined %}

当我没有将任何参数传递给渲染函数时,它被评估为false

编辑

我忘记发布导致问题的条件块内有一个{% block content %}。请查看下面的解决方案。

谢谢,

【问题讨论】:

  • 只是为了排除明显的事情,这是您使用该变量的唯一地方,对吗?所以我们可以确定它不会在没有if <var> is defined 保护的情况下在其他地方使用
  • 是的。我的意思是 var 当然只在条件块内使用
  • 代码的第二行(调用form 函数)应该使用表达式分隔符({{ }})而不是标签分隔符({% %})虽然我希望Twig_Error_Syntax 而不是@ 987654335@ 如果这是主要问题
  • 你是对的。复制代码时是我的错。在 OP 上编辑
  • 第三行是哪一行?带有ifform() 的那个?

标签: php symfony twig


【解决方案1】:

解决了。

这很奇怪,也是我的错,因为我没有在 OP 上发布完整的代码。

{% if form is defined %}
    {% block content%}
        {{ form(form)}}
    {% end block %}
{% endif %}

条件块有一个{% block content %},即使条件被评估为假,Twig 也会尝试渲染它。如果我用内容块包围条件块,问题就解决了。

{% block content%}
    {% if form is defined %}
        {{ form(form)}}
    {% endif %}
{% end block %}

谢谢

【讨论】:

    【解决方案2】:

    Twig 文档说:

    定义:

    defined 检查变量是否在当前上下文中定义。

    空:

    如果 foo 变量为 null、false、空数组或空字符串,则计算结果为 true。

    空:

    如果变量为null,则null返回true。

    因此,根据“form_to_be_rendered”可以具有的值来确定您要检查的具体内容。

    【讨论】:

    • 我想检查一个名为form_to_be_rendered 的变量是否存在于控制器传递给twig 渲染调用的参数集中。更好的方法,我认为它是第一个,defined,但是正如我在 te OP 上所说的那样,会引发错误。
    • 这很奇怪。尝试将变量(在 twig 模板中)重命名为完全不同的名称,看看是否出现错误。因为通常你应该能够检查像 {% if someArray.bla.arlasdjf is defined %} 没有任何错误。
    【解决方案3】:

    你试过了吗:

    {% if form_to_be_renderer|length %}
        {{ form(form_to_be_renderer) }}
    {% endif %}
    

    【讨论】:

    • 我尝试了这种方法,结果是一样的,一个RuntimeError
    猜你喜欢
    • 2017-01-26
    • 2014-03-26
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多