0
votes

I would like auto select value from session on radio button from twig. Unfortunately following code doesn't work for me.

In my twig template

{{ form_row(reg_form.sex, {'data' : 2}) }}

My form field type (User::SEX_MALE = 1, User::SEX_FEMALE = 2)

<?php

namespace FWM\CoreBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

use FWM\CoreBundle\Entity\User;

use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

/**
 * A form field for selecting user's sex
 */
class SexType extends AbstractType
{
    /**
     * {@inheritDoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults([
            'choices' => array(
                User::SEX_MALE => 'label.form.male',
                User::SEX_FEMALE => 'label.form.female'
            ),
            'label' => 'label.form.sex',
            'expanded' => true,
        ]);
    }    

    /**
     * {@inheritDoc}
     */
    public function getParent()
    {
        return 'choice';
    }

    /**
     * {@inheritDoc}
     */
    public function getName()
    {
        return 'user_sex';
    }
}

And my display customization:

{% block form_row %}
    {% set error = false %}
    {% if errors %}
        {% set error = true %}
        {% set attr = attr|merge({'class' : attr.class|default('') ~ ' error'}) %}
    {% endif %}
    {{ form_widget(form, {'attr' : attr, 'error': error}) }}
{% endblock form_row %}


{% block choice_widget %}
{% spaceless %}
    {% if expanded %}
        {% set attr = attr|merge({'class' : attr.class|default('') ~ ' radio-row'}) %}

        <div {{ block('widget_container_attributes') }}>

        {{dump(form)}}

        {% for child in form %}

            <span class="unbreakable">{{ form_widget(child) }}&nbsp;{{ form_label(child) }}</span>

        {% endfor %}
        </div>
    {% else %}
...

If I add "data => 2" to setDefaults(...), field female becomes selected, but I can't find way to make it work by passing value from twig. Could someone help me please?

1
Why would you want to pass things from the template to the object? The template is suppose to be separate from the controller, model, or whatever and i just supposed to create what you have already made.qooplmao
By the time the form is available in the twig then everything that is or was going to happen to it should have happened. You could set your default in the object class $this->createFormBuilder(Object, {your options}) and then set it or you could hard code it in your entity.qooplmao
Hi! Thank you for your answer, of course when i move logic to controller it works perfect.bdlk

1 Answers

-3
votes

@qooplmao wrote in a comment:

By the time the form is available in the twig then everything that is or was going to happen to it should have happened. You could set your default in the object class $this->createFormBuilder(Object, {your options}) and then set it or you could hard code it in your entity.