Forms Symfony 2.x表单字段名称

Forms Symfony 2.x表单字段名称,forms,symfony,symfony-forms,Forms,Symfony,Symfony Forms,当我呈现一个表单时,表单文件名以数组的形式给出。例如:search[item],search[keyword]等,其中search是表单的名称 我不擅长使用表单,但我认为名称应该简单地呈现为,name=“item”或name=“keyword” 我已经查看了所有文档、自定义表单呈现主题等,但我找不到任何方法将Symfony表单的默认行为更改为将表单文件名从“search[item]”呈现为“item”。 这样,当我请求POST数据时,我可以简单地请求$This->getRequest()->re

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

我不擅长使用表单,但我认为名称应该简单地呈现为,
name=“item”
name=“keyword”

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


帮助我)找出如何实现我想要的将是巨大的。ii)让我知道,为什么名称是这样呈现的。这是一种好的做法吗?

Symfony支持在一个页面上使用多个表单。它们可能是相同形式的实例,或者具有相似的字段名。将每个表单的字段都放在一个数组中,这样做很容易。

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

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

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

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

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

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

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

谢谢Peter。这完全有道理,并且回答了我的问题(更多的是好奇)。我仍然认为,应该有办法改变默认的灵活性行为,这是我所缺少的。我相信Francois(另一位创始人)在1.2版前后就表单问题产生分歧后离开了。支持似乎每一秒都在变化,下次你可能会很幸运:)谢谢Peter。这完全有道理,并且回答了我的问题(更多的是好奇)。我仍然认为,应该有办法改变默认的灵活性行为,这是我所缺少的。我相信Francois(另一位创始人)在1.2版前后就表单问题产生分歧后离开了。支持似乎每一秒都在变化,下次你可能会很幸运:)非常好的建议,检查有效性和绑定是Symfony的标准做法。同意,这是一个好建议。谢谢你,皮特。我不确定这是否正是我能够实现我想要的,仅仅因为应用程序的每个其他部分都在工作。我会试一试。奇怪的是,看一下,它说
$request->get('item')
应该可以工作,尽管它建议我上面展示的
getData()
方法更好。看看我的问题,我应该稍微改变一下。你说得对,这很有效。我的问题是,将来自不同来源(其中一个是请求)的预设数据集(我称之为参数)组合在一起,并根据优先级顺序过滤unique后将其传递给服务。我可以做$searach=$this->getRequest->request->all();并使用$search['search']。但是有点难看。希望这对你来说是有意义的,这是我试图实现的不常见的东西。我不确定我是否完全遵循,但如果你需要更多帮助,请发布更多的示例代码非常好的建议,检查有效性和绑定是Symfony的标准做法。同意,这是一个好建议。谢谢你,皮特。我不确定这是否正是我能够实现我想要的,仅仅因为应用程序的每个其他部分都在工作。我会试一试。奇怪的是,看一下,它说
$request->get('item')
应该可以工作,尽管它建议我上面展示的
getData()
方法更好。看看我的问题,我应该稍微改变一下。你说得对,这很有效。我的问题是,将来自不同来源(其中一个是请求)的预设数据集(我称之为参数)组合在一起,并根据优先级顺序过滤unique后将其传递给服务。我可以做$searach=$this->getRequest->request->all();并使用$search['search']。但是有点难看。希望这对你来说是有意义的,这是我试图实现的不常见的东西。我不确定我是否完全遵循了,但是如果你需要更多的帮助,请发布更多的示例代码