Php 使用Symfony创建联系人表单

Php 使用Symfony创建联系人表单,php,forms,symfony,symfony-2.5,Php,Forms,Symfony,Symfony 2.5,我正在尝试使用教程使用Symfony 2.5创建表单,但本教程使用的是Symfony的旧版本。我可以让表单显示并创建实体,但我现在正在提交表单。以下是教程中的代码,此代码位于默认控制器contactAction中 我主要关注的是上面代码的以下部分 $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $form->bindRequest($request); 正如您所注意到的,它使

我正在尝试使用教程使用Symfony 2.5创建表单,但本教程使用的是Symfony的旧版本。我可以让表单显示并创建实体,但我现在正在提交表单。以下是教程中的代码,此代码位于默认控制器contactAction中

我主要关注的是上面代码的以下部分

$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);
正如您所注意到的,它使用的是已经被删除的getRequest,然后我的IDE告诉我找不到buildRequest方法


如果有人打电话给我,将我推向转换symfony verion 2.5 contactAction的正确道路,我将不胜感激。

声明如下:

public function contactAction(Request $request)
{
...
}
和进口:

use Symfony\Component\HttpFoundation\Request;
您的操作中将包含请求,因此您可以删除此行:

$request = $this->getRequest();

嗨,这里有一些不推荐的电话,我真的建议你去Symfony的食谱。但不管怎样,下面的内容会有所帮助

namespace myproject/mybundle/controller;

use Symfony\Component\HttpFoundation\Request;

Class Act //that is me ;) {

    /**
     * @Route("/contact", name="_lalalalala")
     * @Template()
    */
    public function contactAction(Request $request){
    $enquiry = new Enquiry();
    $form = $this->createForm(new EnquiryType(), $enquiry);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($enquiry);
        $em->flush();

        return $this->redirect($this->generateUrl('BloggerBlogBundle_contact'));
    }

    return ['form' => $form->createView()];
  }
}
通过使用symfony服务容器注入表单,可以进一步缩短此代码。我建议你读这本书,它非常棒。因为您可以在任何地方重复使用表单:

您可以将getMethod更改为isMethod-like

然后您可以使用submit like将请求数据提交到表单

或者,您可以使用一次性处理上述两种方法的方法,然后继续执行其他操作,如

$form->handleRequest($request);

if ($form->isValid())
    .. etc

要检索请求对象,有两种可能。要么让

。。。或者从容器中获取请求对象

$request = $this->get('request');
为了将请求绑定到表单,请执行以下操作:

直接将请求传递给submit仍然有效,但已被弃用,并将在Symfony 3.0中删除。你应该改用这个方法

这样,请求绑定部分看起来类似于:

if ($request->isMethod('POST')) {
    $form->handleRequest($request);

    if ($form->isValid()) {
        // do something
    }
}

提供了几乎相同的情况。答案的请求部分是正确的。只有@MatthewThomas表明您不再需要检查POST。但是,他的解决方案使用了注释,这可能会让您感到困惑。感谢大家的反馈,我正在查看答案并试图理解它们,因为我正在创建表单,但它还没有做任何事情,所以我还想知道如何检查提交的表单数据?当使用普通php打印时$\u POST;如果要显示表单数据,我如何使用symfony查看它?是的,使用请求对象,比如$request->get'name of form or field',或者更好的是使用表单对象$form->getData;在表单提交中,但你真的不需要对直接实体执行此操作,除非你说发送电子邮件并希望从请求标题获得特定数据谢谢:StackOverFlow rockshow我可以检查提交的变量吗?当使用普通php打印时$\u POST;将显示表单数据,我如何查看使用symfony作为表单当前没有做任何事情,我想检查它是否正在提交数据如果您想打印POST变量,请执行以下操作:var_dump$request->request->all;
$form->handleRequest($request);

if ($form->isValid())
    .. etc
public function contactAction(Request $request)
{
    // ...
}
$request = $this->get('request');
if ($request->isMethod('POST')) {
    $form->handleRequest($request);

    if ($form->isValid()) {
        // do something
    }
}