访问 Symfony2 请求对象中的 POST 值Symfony 2.2Symfony 2.3

2022-08-30 07:46:36

好吧,这是一个新手问题,但我在任何地方都找不到答案。在 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


答案 1

表单过帐值存储在请求中的表单名称下。例如,如果您已经覆盖了 ContactType() 的方法以返回“联系人”,则可以执行以下操作:getName()

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

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


答案 2

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 值(在本例中为“name”),如下所示:

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

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

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


Symfony 2.3

自 2.3 起,您应该使用 :handleRequestbindRequest

 $form->handleRequest($request);

查看文档


推荐