Symfony 2.x表单字段名称

时间:2013-01-12 22:43:04

标签: forms symfony symfony-forms

当我渲染表单时,表单Filed Name作为数组给出。例如:search[item]search[keyword]等,其中search是表单的名称。

我在使用表单时表现不佳,但我认为,名称应该简单地呈现为name="item"name="keyword"

我查看了所有文档,自定义表单呈现主题等但我找不到任何方法来更改Symfony表单的默认行为,以便将表单文件名从“search [item]”呈现为“item” 。 这样,当我要求POST数据时,我可以简单地询问$this->getRequest()->request->get('item'),因为我必须处理许多单独的参数。

帮助会很棒我想知道如何实现我想要的。 ii)让我知道,为什么这个名字是以这种方式呈现的。这是一个好习惯吗?

2 个答案:

答案 0 :(得分:3)

您可以将Request对象绑定到表单,而不是从Request对象访问参数。

例如,在您将表单发布到的控制器方法中:

namespace Acme\Controller;

use Symfony\Component\HttpFoundation\Request;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Acme\Form\MyFormClass;

class MyFormController extends Controller
{
    receiveFormAction(Request $request)
    {
        $form = new MyFormClass();

        // you can specify that a route only accepts a post 
        // request in the routing definition
        if ($request->isMethod('POST')) {
            // this populates the form object with the data 
            // from the form submission
            $form->bind($request);

            if ( ! $form->isValid()) {
                throw new \Exception('Invalid form');
            }

            // an array of the data the format you require
            $data = $form->getData();

            $data['item'];
            $data['keyword'];
            // etc.
        }
    }
}

以上是您应该在Symfony 2中处理表单的方式,以及如何利用表单组件为您提供的功能,以及验证等。

答案 1 :(得分:1)

Symfony支持页面上的多个表单。它们可能是相同形式的实例,也可能具有相似的字段名称。将每个表单的字段放在一个数组中可以很容易地做到这一点。