Symfony2 - Using Form Builder Without Any Entity Attached

38,822

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();
Share:
38,822
Josh Wa
Author by

Josh Wa

Updated on July 09, 2022

Comments

  • Josh Wa
    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
    Josh Wa almost 11 years
    I think I did overlook that. Perfect! Thanks!
  • MARTIN Damien
    MARTIN Damien about 10 years
    For information: $form->bind($request) is now deprecated, you should use $form->handleRequest($request) now.
  • dnagirl
    dnagirl over 7 years
    Note 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 to use Symfony\Component\Form\Extension\Core\Type\TextType
  • Taylan
    Taylan over 7 years
    Note that this has nothing to do with not using a FormType. Just don't set the data_class option in your FormType. The rest is same with the examples in Symfony docs.