0

当我呈现表单时,表单 Filed Name 以数组的形式给出。例如:search[item]search[keyword],其中 search 是表单的名称。

我不擅长使用表单,但我认为,名称应该简单呈现,name="item"或者name="keyword".

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

帮助会很棒 i) 弄清楚如何实现我想要的。ii) 让我知道,为什么这个名字是这样呈现的。这是好习惯吗?

4

2 回答 2

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 中处理表单的方式,以及如何利用表单组件为您提供的功能,以及验证等。

于 2013-01-12T22:52:56.913 回答
1

Symfony supports multiple forms on a page. They might be instances of the same form or have similar field names. Having the fields for each form all together in an array makes this easy to do.

于 2013-01-12T22:50:22.263 回答