custom - symfony using form
¿Cómo establecer el nombre de un formulario sin una clase? (5)
Aquí se explica cómo establecer el nombre de un formulario con una clase:
http://symfony.com/doc/2.0/book/forms.html#creating-form-classes
pero, ¿cómo establecer el nombre de este formulario?
$form = $this->createFormBuilder($defaultData)
->add(''name'', ''text'')
->add(''email'', ''email'')
->getForm();
Bueno, estoy tratando de obtener los parámetros de publicación después de enviarlo de esta manera:
$postData = $request->request->get(''form_name'');
¿Hay alguna razón por la que no acaba de hacer:
$data = $form->getData();
No hay un método abreviado para este propósito. En su lugar, debe acceder al método createNamedBuilder
en forma de fábrica:
$this->get(''form.factory'')->createNamedBuilder(''form'', ''form_name'', $defaultData)
->add(''name'', ''text'')
->add(''email'', ''email'')
->getForm();
Me gustaría traer algo más de precisión. Al menos, para la versión más reciente de Symfony (2.1), la symtax correcta (documentada en la API) es:
<?php
public FormBuilderInterface createNamedBuilder(string $name, string|FormTypeInterface $type = ''form'', mixed $data = null, array $options = array(), FormBuilderInterface $parent = null)
Es importante porque aún puede pasar opciones al FormBuilder. Para un ejemplo más concreto:
<?php
$form = $this->get(''form.factory'')->createNamedBuilder(''user'', ''form'', null, array(
''constraints'' => $collectionConstraint,
))
->add(''name'', ''text'')
->add(''email'', ''email'')
->getForm();
En la versión 2.4.1 de Symfony, la solución es:
$form = $this->createFormBuilder ( NULL, array ( ''attr'' => array ( ''name'' => ''myFormName'', ''id'' => ''myFormId'' ) ) )
->add (..
También puede establecer otros atributos de formulario de esta manera, pero no lo he intentado. Reemplace NULL con sus datos si lo desea.
Si está utilizando Symfony 3.1, los tipos de campo han cambiado para usar su clase explícita ( FormType
, TextType
y EmailType
) y la posición del parámetro para el valor del atributo de name
formulario ha cambiado de lugar con el parámetro FormType
en la función createNamedBuilder
.
$this->get(''form.factory'')
->createNamedBuilder(''form_name'', FormType::class, $defaultData)
->add(''name'', TextType::class)
->add(''email'', EmailType::class)
->getForm();