form custom change symfony

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();