这里写了如何使用类设置表单的名称:
http://symfony.com/doc/2.0/book/forms.html#creating-form-classes
但如何设置此表单的名称?
$form = $this->createFormBuilder($defaultData)
->add('name', 'text')
->add('email', 'email')
->getForm();
好吧,我试图以这样的方式提交帖子参数:
$postData = $request->request->get('form_name');
答案 0 :(得分:43)
我想提高一些精确度。至少,对于最新版本的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 :(得分:14)
没有用于此目的的快捷方法。相反,您必须访问表单工厂中的方法createNamedBuilder
:
$this->get('form.factory')->createNamedBuilder('form', 'form_name', $defaultData)
->add('name', 'text')
->add('email', 'email')
->getForm();
答案 2 :(得分:3)
你有什么理由不做:
$data = $form->getData();
答案 3 :(得分:3)
如果您正在使用Symfony 3.1,则字段类型已更改为使用其显式类(FormType
,TextType
和EmailType
)以及值的参数位置表单name
已使用createNamedBuilder
function中的FormType
参数切换了地点。
$this->get('form.factory')
->createNamedBuilder('form_name', FormType::class, $defaultData)
->add('name', TextType::class)
->add('email', EmailType::class)
->getForm();
答案 4 :(得分:1)
在Symfony的2.4.1版中,解决方案是:
$form = $this->createFormBuilder ( NULL, array ( 'attr' => array ( 'name' => 'myFormName', 'id' => 'myFormId' ) ) )
->add (..
您也可以通过这种方式设置其他表单属性,但我没试过。如果需要,将NULL替换为您的数据。