当我渲染表单时,表单Filed Name作为数组给出。例如:search[item]
,search[keyword]
等,其中search是表单的名称。
我在使用表单时表现不佳,但我认为,名称应该简单地呈现为name="item"
或name="keyword"
。
我查看了所有文档,自定义表单呈现主题等但我找不到任何方法来更改Symfony表单的默认行为,以便将表单文件名从“search [item]”呈现为“item” 。
这样,当我要求POST数据时,我可以简单地询问$this->getRequest()->request->get('item')
,因为我必须处理许多单独的参数。
帮助会很棒我想知道如何实现我想要的。 ii)让我知道,为什么这个名字是以这种方式呈现的。这是一个好习惯吗?
答案 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支持页面上的多个表单。它们可能是相同形式的实例,也可能具有相似的字段名称。将每个表单的字段放在一个数组中可以很容易地做到这一点。