Symfony2 createFormBuilder字段名称前缀没有实体

时间:2014-08-18 10:53:02

标签: symfony

使用createFormBuilder在Symfony2中创建了一个表单,它不需要实体,仅用于搜索。需要更改表单名称和输入名称。

    $form = $this->createFormBuilder(null, array(
                'action' => $this->generateUrl('route'),
                'method' => 'GET',
        'csrf_protection' => false,
        'attr' => array('name' => 'search'),
            ))
            ->add('query', 'text', array(
                'required' => false,
            ))
            ->getForm();

呈现的HTML如下:

<form class="" method="GET" action="route" name="form">
<div class="errors"></div>
<div id="form" name="search">
<div>
<label for="form_query">Query</label>
<input id="form_query" type="text" value="king" name="form[query]">
</div>
</div>
<p>
</form>

如何更改表单名称?目前它是形式,这意味着div id也是形式,可以改为搜索吗?

其次输入应该有一个名称作为查询而不是[查询]?

我看过有关使用没有实体的表单的文档,但我看不到如何更改这些属性。

最终结果应为:

<form class="" method="GET" action="route" name="search">
<div class="errors"></div>
<div id="search">
<div>
<label for="search_query">Query</label>
<input id="search_query" type="text" value="king" name="query">
</div>
</div>
<p>
</form>

1 个答案:

答案 0 :(得分:7)

你应该致电createNamedBuilder。它允许您在第一个参数中设置自定义表单名称。

示例:

    // public function createNamedBuilder($name, $type = 'form', $data = null, array $options = array())
    $form = $this->get('form.factory')->createNamedBuilder('', 'form', array(), array(
        'action' => $this->generateUrl('route'),
        'method' => 'GET',
        'csrf_protection' => false,
        'attr' => array('name' => 'search'),
    ))->add('query', 'text', array(
        'required' => false,
    ))->getForm();

有关更有用的方法,请参阅:\Symfony\Component\Form\FormFactory