Как задать имя формы без класса?

#symfony

#symfony

Вопрос:

Здесь написано, как задать имя формы с классом:

http://symfony.com/doc/2.0/book/forms.html#creating-form-classes

но как задать имя этой формы?

 $form = $this->createFormBuilder($defaultData)
    ->add('name', 'text')
    ->add('email', 'email')
    ->getForm();
  

Ну, я пытаюсь получить параметры post после отправки его таким образом:

 $postData = $request->request->get('form_name');
  

Ответ №1:

Я хотел бы внести еще немного точности. По крайней мере, для самой последней версии Symfony (2.1) правильный symtax (задокументированный в API):

 <?php

     public FormBuilderInterface createNamedBuilder(string $name, string|FormTypeInterface $type = 'form', mixed $data = null, array $options = array(), FormBuilderInterface $parent = null)
  

Это важно, потому что вы все равно можете передавать параметры в FormBuilder.
Для более конкретного примера:

 <?php

 $form = $this->get('form.factory')->createNamedBuilder('user', 'form',  null, array(
    'constraints' => $collectionConstraint,
))
->add('name', 'text')
->add('email', 'email')
->getForm();
  

Комментарии:

1. В Symfony 3.1 , если вы также хотите установить другие параметры, решение: $this->get('form.factory')->createNamedBuilder('yourFormName', FormType::class, null, ['option'=>'value']

Ответ №2:

Для этой цели нет метода быстрого доступа. Вместо этого вам нужно получить доступ к методу createNamedBuilder на фабрике форм:

 $this->get('form.factory')->createNamedBuilder('form', 'form_name', $defaultData)
    ->add('name', 'text')
    ->add('email', 'email')
    ->getForm();
  

Комментарии:

1. Насколько я вижу, это все еще справедливо для Symfony2.3, я прав? По-прежнему нет ярлыка для этого.

2. Просто отметил, что в Symfony 2.3 параметры наоборот … итак, теперь (name, type, defaults, options) .. см. Документы

Ответ №3:

Если вы используете Symfony 3.1, типы полей изменились, чтобы использовать их явный класс ( FormType , TextType , и EmailType ), а позиция параметра для значения атрибута form name поменялась местами с FormType параметром в createNamedBuilder функции.

 $this->get('form.factory')
  ->createNamedBuilder('form_name', FormType::class, $defaultData)
  ->add('name', TextType::class)
  ->add('email', EmailType::class)
  ->getForm();
  

Ответ №4:

Есть ли какая-либо причина, по которой вы просто не делаете:

 $data = $form->getData();
  

Комментарии:

1. Да, это работает, но я должен повторно объявить форму в действии, вызываемом отправкой формы .. 🙂

Ответ №5:

В версии 2.4.1 Symfony решение:

 $form = $this->createFormBuilder ( NULL, array ( 'attr' => array ( 'name' => 'myFormName', 'id' => 'myFormId' ) ) )
            ->add (..
  

Вы также можете установить другие атрибуты формы таким образом, но я не пробовал. Замените NULL своими данными, если хотите.

Комментарии:

1. Это не работает, поскольку оно отображается как <form name="form" name="myFormName" /> .