我一直在使用Symfony2的表单生成器,并且发现它非常好。我发现自己想要创建一个搜索页面,顶部有一系列框来过滤搜索结果。到目前为止,我有三个不同的实体(法官,口译员,律师)。我希望用户能够输入部分或完整的名称,并让它搜索所有实体。我可以处理实际的搜索部分,但表单生成器代表给我带来了麻烦。
我要做的是创建一个没有附加到任何特定实体的表单。我在Symfony网站上阅读的所有教程和文档都表现得像默认情况下应附加到实体。我想知道是否应该将它附加到任何实体并将每个文本字段设置为mapped = false,如果这是一个我应该自己对表单进行硬编码的实例,或者是否有某种方法可以在表单构建器中执行此操作
答案 0 :(得分:79)
不要使用formType,也不需要附加实体才能使用表单生成器。只需使用数组即可。您可能忽略了Symfony文档中的这一小部分:http://symfony.com/doc/current/form/without_class.html
<?php
// inside your controller ...
$data = array();
$form = $this->createFormBuilder($data)
->add('query', 'text')
->add('category', 'choice',
array('choices' => array(
'judges' => 'Judges',
'interpreters' => 'Interpreters',
'attorneys' => 'Attorneys',
)))
->getForm();
if ($request->isMethod('POST')) {
$form->handleRequest($request);
// $data is a simply array with your form fields
// like "query" and "category" as defined above.
$data = $form->getData();
}
答案 1 :(得分:7)
您还可以使用createNamedBuilder
方法创建表单
$form = $this->get('form.factory')->createNamedBuilder('form', 'form')
->setMethod('POST')
->setAction($this->generateUrl('upload'))
->add('attachment', 'file')
->add('save', 'submit', ['label' => 'Upload'])
->getForm();