Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony 2 Form with select list

How can i create a select list with values from a database table in Symfony 2?

I have 2 entities: Student and Classroom with a ManyToOne relationship and i need to create a form with the folowing fields: name, surname, age, classroom(select list from available classes).

In my Student Form i have

    $builder
        ->add('name')
        ->add('surname')
        ->add('age')
        ->add('classroom', new ClassroomType())
    ;

In my Classroom Form i have this:

    $classrooms =$this->getDoctrine()->getRepository('UdoCatalogBundle:Classroom')->findAll();
    $builder
        ->add('clasa','choice',array('choices' => array($classrooms->getId() => $classrooms->getName())));

I get this following error:

Fatal error: Call to undefined method Udo\CatalogBundle\Form\ClassroomType::getDoctrine() in /var/www/html/pos/src/Udo/CatalogBundle/Form/ClassroomType.php on line 13         

Kind Regards, Cearnau Dan

like image 294
Dan Cearnau Avatar asked Aug 23 '11 18:08

Dan Cearnau


People also ask

How do I create a choice list in Symfony?

When creating your choice field, you can specify which options are available by either passing an array of options (“choices”) or by passing a custom object that implements \Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface (“choice_list”).

How does Symfony know the correct form field type?

If you add a form field that matches an entity property that has an association to another entity, then Symfony guesses the correct form field type, retrieves the form field options, and even validates your input to make sure it is a valid option.

What version of Symfony do I need to install Select2?

It works with Symfony 4 and 5. For Symfony 2 and 3, please use version or 2.x of the bundle. For Select2 4.0 and above. For older versions, use version 1.x of the bundle (not compatible with Symfony 5).

What is Select2 entity bundle in Symfony?

select2entity-bundle. Introduction. This is a Symfony bundle which enables the popular Select2 component to be used as a drop-in replacement for a standard entity field on a Symfony form. It works with Symfony 2, 3 and 4.


1 Answers

Not sure if you found an answer yet but I just had to do some digging around to figure this out for my own project.

The form class isn't set up to use Doctrine like the controller is so you can't reference the Entity the same way. What you want to do is use the entity Field Type which is a special choice Field Type allowing you to load options from a Doctrine entity as you are trying to do.

Ok so long story short. Instead of doing what you are doing to create the choice field, do this:

->add('category', 'entity', array(
    'class' => 'VendorWhateverBundle:Category',
    'query_builder' => function($repository) { return $repository->createQueryBuilder('p')->orderBy('p.id', 'ASC'); },
    'property' => 'name',
))

I'm not sure if you could place the query_builder function into a repository or what, I'm kind of swinging wildly as I go. Up to this point the documentation I linked to above is pretty clear on what to do. I guess the next step is to read up on Doctrine's QueryBuilder.

While you're in there I think you want to drop the bit where you are embedding the Classroom form,

->add('classroom', new ClassroomType())

You probably don't want people creating their own classrooms. Unless you do, then yeah.

like image 58
ornj Avatar answered Sep 21 '22 14:09

ornj