Search code examples
formssymfonyformcollectionsymfony-2.8

Symfony 2.8 - Form Collection Type rendering only label


In my application an user can have many languages so User and Language entities are related by ManyToOne relationship.

In user entity class:

/**
 * @ORM\OneToMany(targetEntity="TraineeLanguage", mappedBy="trainee", cascade={"persist"}))
 */
private $languages;

public function __construct()
{
    $this->languages = new ArrayCollection();
}

In language entity class:

/**
 * @ORM\ManyToOne(targetEntity="Trainee", inversedBy="languages")
 * @ORM\JoinColumn(name="trainee_id", referencedColumnName="id")
 */
private $trainee;

Now I would like to create a collection of language forms in user profile form:

->add('languages', CollectionType::class, array(
    'type' => TraineeLanguageType::class,
    'required' => false
))

My language form class:

class TraineeLanguageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('language', TextType::class, array(
                'attr' => array(
                    'placeholder' => 'Language'
                ),
                'required' => false
            ))
            ->add('level', TextType::class, array(
                'attr' => array(
                    'placeholder' => 'Level'
                ),
                'required' => false
            ));
    }
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver
            ->setDefaults(array(
                'data_class' => 'IndexBundle\Entity\TraineeLanguage'
            ));
    }

    public function getName()
    {
        return 'language';
    }
}

Now when I try to display the form

{{ form_row(trainee_background_information_form.languages) }}

Only label is displayed.

Also it is not working with:

{{ form_widget(trainee_background_information_form.languages) }}

or

{% for language in trainee_background_information_form.languages %}
    {{ form_row(language) }}
{% endfor %}

Does anyone notice mistakes in my code and know what is going on?


Solution

  • When you use Collection Type, you need to write additional html & js, to handle this type of field. More is in Symfony documentation: http://symfony.com/doc/current/reference/forms/types/collection.html