使用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>
答案 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