[handleRequest()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#handleRequest()) 方法是在 Symfony 2.3 中引進(jìn)的。
有了 handleRequest() 方法,處理表單提交就簡(jiǎn)單多了:
use Symfony\Component\HttpFoundation\Request;
// ...
public function newAction(Request $request)
{
$form = $this->createFormBuilder()
// ...
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
// perform some action...
return $this->redirectToRoute('task_success');
}
return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
有關(guān)這個(gè)方法的更多細(xì)節(jié)詳見處理表單提交。
在 Symfony 2.3 之前,submit() 方法叫做 bind()。
在某些情況下,你可能想要對(duì)何時(shí)你的表單被提交以及什么數(shù)據(jù)傳遞到它有更好的控制。代替使用 [handleRequest()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#handleRequest()) 方法,直接將提交的數(shù)據(jù)傳遞到 [submit()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#submit()):
use Symfony\Component\HttpFoundation\Request;
// ...
public function newAction(Request $request)
{
$form = $this->createFormBuilder()
// ...
->getForm();
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isValid()) {
// perform some action...
return $this->redirectToRoute('task_success');
}
}
return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
包含嵌套字段的表單期望在 [submit()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#submit()) 中的一個(gè)數(shù)組。你也可以同直接在字段上調(diào)用 [submit()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#submit()) 提交獨(dú)立的字段:
$form->get('firstName')->submit('Fabien');
在 Symfony 2.3 之前,submit 方法叫做 bind。
在 Symfony 2.3 之前,[submit()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#submit()) 方法接受請(qǐng)求對(duì)象作為方便的捷徑到前一個(gè)例子:
use Symfony\Component\HttpFoundation\Request;
// ...
public function newAction(Request $request)
{
$form = $this->createFormBuilder()
// ...
->getForm();
if ($request->isMethod('POST')) {
$form->submit($request);
if ($form->isValid()) {
// perform some action...
return $this->redirectToRoute('task_success');
}
}
return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
將請(qǐng)求直接傳遞到 [submit()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#submit()) 依然有效,但是我們不推薦并且這將會(huì)在 Symfony 3.0 中移除。作為替代你應(yīng)當(dāng)看看 [handleRequest()](http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#handleRequest()) 方法。