#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" />
.