Bonswouar
Bonswouar

Reputation: 1590

Twig : Access to variable from outer scope in a form widget customization

I'm trying to customize a specific widget, like in the documentation : http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field

The problem is that in this custom block, I need to use a variable from my actual template. I thought "blocks have access to variables from outer scopes", but apparently not in this case :

{% extends "CDASvBundle::layout.html.twig" %}
{% block _contact_activity1_widget %}
<select name="contact[activity1]">
    {% for key, child_contact_categories in contact_categories_tab %}
    <option value="{{key}}">{{child_contact_categories}}</option>
    {% endfor %}
</select>

It's saying that contact_categories_tab is undefined, but outside of this block (in the normal content block for example), it works !

I tried something like :

{% use 'form_div_layout.html.twig' with contact_categories_tab as contact_categories_tab %}

But that doesn't either.. Though I'm not sure I understand if I have to use use and how !

I see one other solution that I haven't tried yet : put this customization in another template. But I don't really want to do that (few lines in a new template), there should be a way to do that in only ONE template ?!

Upvotes: 2

Views: 2141

Answers (1)

Bonswouar
Bonswouar

Reputation: 1590

Finally found the answer in a previous post :

Each symfony form type extents AbstractType class.

AbstactType class has method:

public function buildView(FormView $view, FormInterface $form, array $options)
{
    $view->set('img_src', '120x100.jpg');
    $view->set('my_variable', $foo);

}

You can create this method on your form type and next in your twig:

{{ asset(img_src) }}

Source : How to get entity or pass variable to Symfony2 twig form widget?

Upvotes: 1

Related Questions