使用Symfony创建联系表单

时间:2014-09-22 12:32:08

标签: php forms symfony symfony-2.5

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

public function contactAction()
{
    $enquiry = new Enquiry();
    $form = $this->createForm(new EnquiryType(), $enquiry);

    $request = $this->getRequest();
    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);

        if ($form->isValid()) {
            // Perform some action, such as sending an email

            // Redirect - This is important to prevent users re-posting
            // the form if they refresh the page
            return $this->redirect($this->generateUrl('BloggerBlogBundle_contact'));
        }
    }

    return $this->render('BloggerBlogBundle:Page:contact.html.twig', array(
        'form' => $form->createView()
    ));
}

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

$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);

正如您将注意到它正在使用已被删除的getRequest(),然后我的IDE告诉我buildRequest方法无法找到。

如果有人打电话让我走向正确的转换contactAction symfony verion 2.5的路径,我将非常感激,我将非常感激。

4 个答案:

答案 0 :(得分:2)

声明这样的动作:

public function contactAction(Request $request)
{
...
}

导入:

use Symfony\Component\HttpFoundation\Request;

您将在行动中收到请求,因此您可以删除此行:

$request = $this->getRequest();

答案 1 :(得分:1)

嗨,有一些不赞成的电话,我真的建议去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服务容器注入表单,从而进一步缩短此代码。我建议阅读它非常棒。你可以在任何地方使用表格:)

答案 2 :(得分:0)

您可以将getMethod更改为isMethod

if ($request->isMethod('POST'))

然后您可以使用submit

将请求数据提交到表单
$form->submit($request->request->get($form->getName()));

或者您可以使用handleRequest方法一次性处理上述2方法,然后您可以继续执行其余操作,例如

$form->handleRequest($request);

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

答案 3 :(得分:0)

要检索请求对象,您有两种可能性。让Symfony pass the request as an argument to your controller action ...

public function contactAction(Request $request)
{
    // ...
}

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

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

对于请求与表单的绑定,the manual states以下内容:

  

将请求直接传递给submit()仍然有效,但已弃用,将在Symfony 3.0中删除。您应该使用方法handleRequest()代替。

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

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

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