我正在尝试使用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的路径,我将非常感激,我将非常感激。
答案 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
}
}