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?
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 %}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With