使用Symfony创建联系表格



我正试图使用本教程使用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的正确道路,我将不胜感激。

像这样声明操作:

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

和导入:

use SymfonyComponentHttpFoundationRequest;

你的操作中会有请求,所以你可以删除这行:

$request = $this->getRequest();

嗨,还有一些不推荐使用的电话,我真的建议你去看Symfony的食谱。但无论如何,下面的内容会有所帮助。

namespace myproject/mybundle/controller;
use SymfonyComponentHttpFoundationRequest;
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

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

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

$form->submit($request->request->get($form->getName()));

或者,你可以使用handleRequest方法,它将一次性处理上述2种方法,然后你可以像一样继续你的其他操作

$form->handleRequest($request);
if ($form->isValid())
    .. etc

要检索请求对象,有两种可能性。要么让Symfony将请求作为参数传递给控制器操作。。。

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

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

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

为了将请求绑定到表格,手册规定如下:

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

这样,请求绑定部分将类似于以下内容:

if ($request->isMethod('POST')) {
    $form->handleRequest($request);
    if ($form->isValid()) {
        // do something
    }
}

相关内容

  • 没有找到相关文章

最新更新