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');
}
}