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

Posted

技术标签:

【中文标题】Symfony2 - 使用没有附加任何实体的表单生成器【英文标题】:Symfony2 - Using Form Builder Without Any Entity Attached 【发布时间】:2013-05-28 19:11:45 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

不要使用 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();

【讨论】:

我想我确实忽略了这一点。完美的!谢谢! 有关信息:$form-&gt;bind($request) 现在已弃用,您现在应该使用$form-&gt;handleRequest($request) 请注意,对于 Symfony 3,字段类型必须是类名而不是别名。所以-&gt;add('query', 'text') 变成了-&gt;add('query', TextType::class) 并且你必须记住use Symfony\Component\Form\Extension\Core\Type\TextType 请注意,这与不使用 FormType 无关。只是不要在FormType 中设置data_class 选项。其余与 Symfony 文档中的示例相同。【参考方案2】:

你也可以使用createNamedBuilder方法创建表单

$form = $this->get('form.factory')->createNamedBuilder('form', 'form')
            ->setMethod('POST')
            ->setAction($this->generateUrl('upload'))
            ->add('attachment', 'file')
            ->add('save', 'submit', ['label' => 'Upload'])
            ->getForm();

【讨论】:

以上是关于Symfony2 - 使用没有附加任何实体的表单生成器的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 防止多个表单提交

动态表单(切换实体)symfony2

symfony2 构建表单实体 oneToMany

从 Symfony2 表单存储实体不起作用

如何在循环symfony2中为同一实体添加重复的表单

Symfony2 和 Doctrine2 :用两个实体填充表单(一个复杂的场景)