访问Symfony2请求对象中的POST值

Acy*_*yra 93 php http-post symfony

好的,这是一个新手问题,但我无法在任何地方找到答案.在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');
Run Code Online (Sandbox Code Playgroud)

不幸的$name_value是没有退货.我究竟做错了什么?谢谢!

Pro*_*tic 125

表单发布值存储在请求中表单的名称下.例如,如果您重写了getName()ContactType()的方法以返回"contact",那么您将执行以下操作:

$postData = $request->request->get('contact');
$name_value = $postData['name'];
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到问题,请尝试执行var_dump()操作$request->request->all()以查看所有帖子值.

  • 谢谢.var_dump有帮助,我最终用全名攻击它以恢复表单数据,例如$ postData = $ request-> request-> get('acme_somebundle_contact_type') (2认同)
  • 如果你重写了`getName()`,那么不硬编码名称是有意义的:`$ request-> request-> get($ form-> getName());` (2认同)

tim*_*hew 99

Symfony 2.2

此解决方案自2.3以来已弃用,将在3.0中删除,请参阅文档

$form->getData();
Run Code Online (Sandbox Code Playgroud)

为您提供表单参数的数组

来自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
}
Run Code Online (Sandbox Code Playgroud)

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

$this->get('request')->request->get('name');
Run Code Online (Sandbox Code Playgroud)

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

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


Symfony 2.3

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

 $form->handleRequest($request);
Run Code Online (Sandbox Code Playgroud)

看文档

  • 这很棒,现在是最好的答案.当我提出问题时,$ form-> getData()不存在或没有记录. (4认同)
  • 要将请求数据绑定到最新版本,您应该使用$ form-> handleRequest($ request); 而不是$ form-> submit($ request); 我认为.更多细节http://symfony.com/doc/2.3/book/forms.html#handling-form-submissions (4认同)

小智 38

对我有用的是使用这个:

$data = $request->request->all();
$name = $data['form']['name'];
Run Code Online (Sandbox Code Playgroud)


Dmi*_*riy 17

方法有一个技巧ParameterBag::get().您可以设置$deep参数true,没有额外的变量访问所需的深层嵌套值:

$request->request->get('form[some][deep][data]', null, true);
Run Code Online (Sandbox Code Playgroud)

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


met*_*eor 8

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

$form->get('dueDate')->getData();
Run Code Online (Sandbox Code Playgroud)

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

$form->get('dueDate')->setData(new \DateTime());
Run Code Online (Sandbox Code Playgroud)

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


Ilk*_*aci 7

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

$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];
Run Code Online (Sandbox Code Playgroud)