Я пытаюсь отобразить форму на шаблоне ветки, если она определена в вызове рендеринга на контроллере. Что-то вроде:
{% 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 %}
что вызывает проблему. Пожалуйста, просмотрите решение ниже.
Благодаря,
Решаемые.
Это довольно странно и моя вина, так как я не размещаю полный код на 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 %}
благодаря
Документация Twig гласит:
определены:
определенные проверки, если переменная определена в текущем контексте.
пусто:
оценивает значение true, если переменная foo имеет значение null, false, пустой массив или пустую строку.
ноль:
null возвращает true, если переменная имеет значение null.
Итак, выясните, что именно вы хотите проверить, в зависимости от того, какое значение может иметь значение form_to_be_rendered.
form_to_be_rendered
в наборе аргументов, передаваемых контроллером для ветки при вызове рендеринга. Лучший подход, я думаю, это первый, defined
, но выдается ошибка, как я уже говорил на OP.
Ты пробовал:
{% if form_to_be_renderer|length %}
{{ form(form_to_be_renderer) }}
{% endif %}
if <var> is defined
защита