Symfony2 - 使用没有附加任何实体的表单生成器

Jos*_* Wa 41 php forms doctrine symfony

我一直在使用Symfony2的表单生成器,并且发现它非常好.我发现自己想要创建一个搜索页面,顶部有一系列框来过滤搜索结果.到目前为止,我有三个不同的实体(法官,口译员,律师).我希望用户能够输入部分或完整的名称,并让它搜索所有实体.我可以处理实际的搜索部分,但表单生成器生成是给我带来麻烦的.

我想要做的是创建一个没有附加到任何特定实体的表单.我在Symfony网站上阅读的所有教程和文档都表现得像默认情况下应附加到实体.我想知道我是否应该将它附加到任何实体并只是将每个文本字段设置为mapped = false,如果这是一个我应该自己硬编码表单的实例,或者如果有一些方法在表单构建器中执行此操作.

lif*_*ifo 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();
}
Run Code Online (Sandbox Code Playgroud)

  • 有关信息:`$ form-> bind($ request)`现在已被弃用**,您现在应该使用`$ form-> handleRequest($ request)`. (22认同)
  • 请注意,对于Symfony 3,字段类型必须是类名而不是别名.所以` - > add('query','text')`变成` - > add('query',TextType :: class)`你必须记得`使用Symfony\Component\Form\Extension\Core\Type\TextType` (2认同)

Far*_*mov 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();
Run Code Online (Sandbox Code Playgroud)