Symfony2 - Using Form Builder Without Any Entity Attached
Solution 1
Don't use a formType and you don't need to attach an entity in order to use the Form Builder. Simply use an array instead. You probably overlooked this small section in the Symfony documentation: http://symfony.com/doc/current/form/without_class.html
<?php
// inside your controller ...
$data = array();
$form = $this->createFormBuilder($data)
->add('query', 'text')
->add('category', 'choice',
array('choices' => array(
'judges' => 'Judges',
'interpreters' => 'Interpreters',
'attorneys' => 'Attorneys',
)))
->getForm();
if ($request->isMethod('POST')) {
$form->handleRequest($request);
// $data is a simply array with your form fields
// like "query" and "category" as defined above.
$data = $form->getData();
}
Solution 2
You can also use createNamedBuilder
method for creating form
$form = $this->get('form.factory')->createNamedBuilder('form', 'form')
->setMethod('POST')
->setAction($this->generateUrl('upload'))
->add('attachment', 'file')
->add('save', 'submit', ['label' => 'Upload'])
->getForm();
Josh Wa
Updated on July 09, 2022Comments
-
Josh Wa almost 2 years
I have been using the form builder with Symfony2, and find it quite nice. I find myself wanting to create a search page with a series of boxes at the top to filter search results. I have three different entities as of now (judges, interpreters, attorneys). I would like the users to be able to enter partial or complete names, and have it search all of the entities. I can handle the actual searching part, but the form builder generation is what is giving me trouble.
What I am trying to do is create a form not attached to any particular entity. All the tutorials and documentation I've read on the Symfony site acts like it should be attached to an entity by default. I am wondering if I should just attach it to any entity and just set each text field to mapped = false, if this is an instance where I should just hard code the form myself, or if there is some way to do this within form builder.
-
Josh Wa almost 11 yearsI think I did overlook that. Perfect! Thanks!
-
MARTIN Damien about 10 yearsFor information:
$form->bind($request)
is now deprecated, you should use$form->handleRequest($request)
now. -
dnagirl over 7 yearsNote that for Symfony 3, the field types must be the class name and not an alias. So
->add('query', 'text')
becomes->add('query', TextType::class)
and you must remember touse Symfony\Component\Form\Extension\Core\Type\TextType
-
Taylan over 7 yearsNote that this has nothing to do with not using a FormType. Just don't set the
data_class
option in yourFormType
. The rest is same with the examples in Symfony docs.