一尘不染

访问Symfony2请求对象中的POST值

php

好的,这是一个新手问题,但我在任何地方都找不到答案。在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是没有返回任何东西。我究竟做错了什么?谢谢!


阅读 317

收藏
2020-05-29

共1个答案

一尘不染

Symfony 2.2

此解决方案从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值(在这种情况下为“名称”),如下所示:

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

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

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


Symfony 2.3

从2.3开始,您应该使用handleRequest而不是bindRequest

 $form->handleRequest($request);
2020-05-29