Carles
Carles

Reputation: 186

Symfony2/Twig: Error on conditionally render

I'm trying to render a form on a twig template if its is defined in the render call on controller. Something like:

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

If the controller's render call includes the var of form_to_be_rendered, everything runs well, and the form is rendered. But if I try to render the template without this argument, Twig throws a RuntimeError indicating that the form_to_be_rendered variable is not defined.

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

I've tried passing it as a null value and is not null check on condition, but it fails too.

I put this dump on template:

{% dump reset_password_form is defined %}

And it is evaluated as false when I don't pass any arguments to render function.

EDIT

I forgot to post that there is a {% block content %} inside the conditional block which causes the issue. Please view the solution below.

Thanks,

Upvotes: 1

Views: 1274

Answers (3)

Carles
Carles

Reputation: 186

Solved.

It's pretty weird and my fault since I don't post the full code on the OP.

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

The conditional block has inside a {% block content %} that Twig tries to render even the condition is evaluated to false. If I surround the conditional block with the content block, the issue is resolved.

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

Thanks

Upvotes: 2

scoolnico
scoolnico

Reputation: 3135

Did you try:

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

Upvotes: 0

Frank Drebin
Frank Drebin

Reputation: 1083

Twig documentation says:

defined:

defined checks if a variable is defined in the current context.

empty:

evaluates to true if the foo variable is null, false, an empty array, or the empty string.

null:

null returns true if the variable is null.

So figure out, what exactly you want to check, depending on what value "form_to_be_rendered" can have.

Upvotes: 0

Related Questions