访问Symfony2请求对象中的POST值

时间:2011-08-02 17:50:41

标签: php symfony http-post

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

9 个答案:

答案 0 :(得分:126)

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

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

如果您仍然遇到问题,请尝试var_dump()上的$request->request->all()查看所有帖子值。

答案 1 :(得分:99)

Symfony 2.2

此解决方案自2.3以来已弃用,将在3.0 see documentation

中删除
$form->getData();

为您提供表单参数的数组

来自symfony2 book第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()方法是一个更好的选择,因为它 在表单框架转换后返回数据(通常是对象)。

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


Symfony 2.3

从2.3开始,您应该使用handleRequest代替bindRequest

 $form->handleRequest($request);

see documentation

答案 2 :(得分:38)

对我有用的是:

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

答案 3 :(得分:17)

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

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

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

答案 4 :(得分:8)

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

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

此外,还可以直接修改未映射字段的数据: 清单12-35

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

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

答案 5 :(得分:7)

我通过以下方式访问我的多部分帖子请求的ticketNumber参数。

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

答案 6 :(得分:1)

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

$form->getClientData();

答案 7 :(得分:0)

Symfony doc获取请求数据

最后,可以使用getContent()访问与请求正文一起发送的原始数据:

$ content = $ request-> getContent();

答案 8 :(得分:-14)

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

来自“Form.php”:

的getData() getNormData() getViewData()

您可以在此文件中找到更多详细信息。