Symfony2 / Twig: ошибка при условном рендеринге

1

Я пытаюсь отобразить форму на шаблоне ветки, если она определена в вызове рендеринга на контроллере. Что-то вроде:

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

Если вызов рендеринга контроллера включает в себя var form_to_be_rendered, все работает хорошо, и форма отображается. Но если я попытаюсь отобразить шаблон без этого аргумента, 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 когда я не передаю никаких аргументов функции render.

РЕДАКТИРОВАТЬ

Я забыл опубликовать, что внутри условного блока есть {% block content %} что вызывает проблему. Пожалуйста, просмотрите решение ниже.

Благодаря,

  • 0
    Просто чтобы исключить очевидные вещи, это единственное место, где вы используете эту переменную, верно? Таким образом, мы можем быть уверены, что он не используется где-то еще, if <var> is defined защита
  • 0
    Да уж. Я имею в виду, что var используется только внутри условного блока, конечно
Показать ещё 7 комментариев
Теги:
twig

3 ответа

2
Лучший ответ

Решаемые.

Это довольно странно и моя вина, так как я не размещаю полный код на OP.

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

У условного блока внутри {% block content %} который Twig пытается отобразить, даже условие оценивается как false. Если я окружаю условный блок блоком контента, проблема будет решена.

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

благодаря

0

Документация Twig гласит:

определены:

определенные проверки, если переменная определена в текущем контексте.

пусто:

оценивает значение true, если переменная foo имеет значение null, false, пустой массив или пустую строку.

ноль:

null возвращает true, если переменная имеет значение null.

Итак, выясните, что именно вы хотите проверить, в зависимости от того, какое значение может иметь значение form_to_be_rendered.

  • 0
    Я хочу проверить, существует ли переменная с именем form_to_be_rendered в наборе аргументов, передаваемых контроллером для ветки при вызове рендеринга. Лучший подход, я думаю, это первый, defined , но выдается ошибка, как я уже говорил на OP.
  • 0
    Можете ли вы опубликовать все сообщение об ошибке, пожалуйста?
Показать ещё 4 комментария
0

Ты пробовал:

{% if form_to_be_renderer|length %}
    {{ form(form_to_be_renderer) }}
{% endif %}
  • 0
    Я пытаюсь этот подход, и результат тот же, RuntimeError

Ещё вопросы

Сообщество Overcoder
Наверх
Меню