Access variable from FormType in types twig template

symfony, symfony-2.4, symfony-forms, twig

Solution

You can add custom view variables by wrapping `buildView()`.

/* ... */

use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;

/* ... */

class PositioningFlashType extends AbstractType                           
{                                                                         
    /* ... */

    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        parent::buildView($view, $form, $options);

        $view->vars = array_merge($view->vars, array(
            'game' => $options['game']
        ));
    }

    /* ... */                                                                   
}

You'll now have `game` under `form.vars`. Simply override your custom form widget to do whatever you need to do with it.

{% block positioning_flash_widget %}
    {% spaceless %}
        {# ... #}

        <input value="{{ form.vars.game.id }}" />
    {% endspaceless %}
{% endblock %}

Problem

I created a custom form type like this: ``` class PositioningFlashType extends AbstractType { public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'game' => new Game() )); } public function getParent() { return 'form'; } /** * Returns the name of this type. * * @return string The name of this type */ public function getName() { return 'positioning_flash'; } } ``` And in another form (`GameType`) type I use it like this: ``` $builder ->add('flash', new PositioningFlashType(), array( 'mapped' => false, 'game' => $options['game'] )) ``` And inside the controller I want to create the whole form: ``` private function createEditForm(Game $entity) { $form = $this->createForm(new GameType(), $entity, array( 'action' => $this->generateUrl('game_update', array('id' => $entity->getId())), 'method' => 'PUT', 'edit' => true, 'game' => $entity )); $form->add('submit', 'submit', array('label' => 'Speichern')); return $form; } ``` So basically, all I want to do is to pass-through the `Game` instance to the `PositioningFlashType` and inside it's template I want to access this `game` instance like this: ``` value="{{ asset('data/swf/backendtool.swf') }}?game={{ game.id }} ``` But symfony throws an error, saying that the variable `game` is not defined. What is the correct way to pass-through a variable from the controller to a nested FormType?

Original source