在Symfony2请求对象中访问POST值

好的,这是一个新手问题,但我无法find答案。 在Symfony2的控制器中,我想从我的一个表单中访问POST值。 在控制器中我有:

public function indexAction() { $request = $this->get('request'); if ($request->getMethod() == 'POST') { $form = $this->get('form.factory')->create(new ContactType()); $form->bindRequest($request); if ($form->isValid()) { $name_value = $request->request->get('name'); 

不幸的是$name_value没有返回任何东西。 我究竟做错了什么? 谢谢!

Symfony 2.2

这个解决scheme从2.3开始不推荐使用,将在3.0中被移除, 参见文档

 $form->getData(); 

给你一个表单参数的数组

从symfony2书第162页(第12章:表格)

有时,您可能只想使用没有类的表单,并获取提交的数据的数组。 这其实很简单:

 public function contactAction(Request $request) { $defaultData = array('message' => 'Type your message here'); $form = $this->createFormBuilder($defaultData) ->add('name', 'text') ->add('email', 'email') ->add('message', 'textarea') ->getForm(); if ($request->getMethod() == 'POST') { $form->bindRequest($request); // data is an array with "name", "email", and "message" keys $data = $form->getData(); } // ... render the form } 

您也可以直接通过请求对象访问POST值(在本例中为“name”),如下所示:

 $this->get('request')->request->get('name'); 

但是,请注意,在大多数情况下,使用getData()方法是更好的select,因为它在表单框架转换后返回数据(通常是一个对象)。

当你想访问表单令牌时,你必须使用问题$postData = $request->request->get('contact'); 因为getData()从数组中删除元素


Symfony 2.3

自2.3以来,你应该使用handleRequest而不是bindRequest

  $form->handleRequest($request); 

见文档

表单post值存储在请求中表单的名称下。 例如,如果您重写了ContactType()的getName()方法以返回“contact”,则可以这样做:

 $postData = $request->request->get('contact'); $name_value = $postData['name']; 

如果仍有问题,请尝试在$request->request->all()上执行var_dump() $request->request->all()以查看所有后期值。

什么对我来说是使用这个:

 $data = $request->request->all(); $name = $data['form']['name']; 

ParameterBag::get()方法有一个技巧。 您可以将$deep参数设置$deep true并访问所需的深层嵌套值,而无需额外的variables:

 $request->request->get('form[some][deep][data]', null, true); 

你也可以设置默认值( get()方法的第二个参数),它可以避免多余的isset($form['some']['deep']['data'])调用。

可以在控制器中访问字段数据:清单12-34

 $form->get('dueDate')->getData(); 

另外,未映射字段的数据也可以直接修改:代码清单12-35

 $form->get('dueDate')->setData(new \DateTime()); 

第164页symfony2书(2013年10月9日生成)

我认为,为了获取请求数据,由表单对象进行绑定和validation,您必须使用:

$form->getClientData();

我以下面的方式访问我的多部分发布请求的ticketNumber参数。

 $data = $request->request->all(); $ticketNumber = $data["ticketNumber"]; 

如果你是新手,欢迎来到Symfony2,一个开源项目,如果你想学很多东西,你可以打开源码!

从“Form.php”:

getData()getNormData()getViewData()

你可以在这个文件中find更多的细节。