Ver índice de contenidos del libro

12.8. Definiendo formularios como servicios

Definir los formularios como servicios es una buena práctica que simplifica mucho su uso en tu aplicación.

# src/Acme/TaskBundle/Resources/config/services.yml
services:
    acme_demo.form.type.task:
        class: Acme\TaskBundle\Form\Type\TaskType
        tags:
            - { name: form.type, alias: task }
<!-- src/Acme/TaskBundle/Resources/config/services.xml -->
<service id="acme_demo.form.type.task"
    class="Acme\TaskBundle\Form\Type\TaskType">
    <tag name="form.type" alias="task" />
</service>
// src/Acme/TaskBundle/Resources/config/services.php
use Symfony\Component\DependencyInjection\Definition;
 
$container
    ->register(
        'acme_demo.form.type.task',
        'Acme\TaskBundle\Form\Type\TaskType'
    )
    ->addTag('form.type', array(
        'alias' => 'task',
    ))
;

La configuración anterior te permite crear cualquier formulario directamente desde un controlador:

// src/Acme/TaskBundle/Controller/DefaultController.php
// ...
 
public function newAction()
{
    $task = ...;
    $form = $this->createForm('task', $task);
 
    // ...
}

También puedes utilizar este tipo de formulario definido como servicio dentro de otros formularios:

// src/Acme/TaskBundle/Form/Type/ListType.php
// ...
 
class ListType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // ...
 
        $builder->add('someTask', 'task');
    }
}