How to Use the submit() Function to Handle Form Submissions
Warning: You are browsing the documentation for Symfony 2.x, which is no longer maintained.
Read the updated version of this page for Symfony 7.1 (the current stable version).
2.3
The handleRequest() method was introduced in Symfony 2.3.
With the handleRequest()
method, it is really easy to handle form
submissions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use Symfony\Component\HttpFoundation\Request;
// ...
public function newAction(Request $request)
{
$form = $this->createFormBuilder()
// ...
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// perform some action...
return $this->redirectToRoute('task_success');
}
return $this->render('default/new.html.twig', array(
'form' => $form->createView(),
));
}
Tip
To see more about this method, read Forms.
Calling Form::submit() manually
In some cases, you want better control over when exactly your form is submitted and what data is passed to it. Instead of using the handleRequest() method, pass the submitted data directly to submit():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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->isSubmitted() && $form->isValid()) {
// perform some action...
return $this->redirectToRoute('task_success');
}
}
return $this->render('default/new.html.twig', array(
'form' => $form->createView(),
));
}
Tip
Forms consisting of nested fields expect an array in submit(). You can also submit individual fields by calling submit() directly on the field:
1
$form->get('firstName')->submit('Fabien');
Tip
When submitting a form via a "PATCH" request, you may want to update only a few
submitted fields. To achieve this, you may pass an optional second boolean
argument to submit()
. Passing false
will remove any missing fields
within the form object. Otherwise, the missing fields will be set to null
.
Caution
When the second parameter $clearMissing
is false
, like with the
"PATCH" method, the validation extension will only handle the submitted
fields. If the underlying data needs to be validated, this should be done
manually, i.e. using the validator.
Passing a Request to Form::submit() (Deprecated)
2.3
Before Symfony 2.3, the submit()
method was known as bind()
.
Before Symfony 2.3, the submit() method accepted a Request object as a convenient shortcut to the previous example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use Symfony\Component\HttpFoundation\Request;
// ...
public function newAction(Request $request)
{
$form = $this->createFormBuilder()
// ...
->getForm();
if ($request->isMethod('POST')) {
$form->submit($request);
if ($form->isSubmitted() && $form->isValid()) {
// perform some action...
return $this->redirectToRoute('task_success');
}
}
return $this->render('default/new.html.twig', array(
'form' => $form->createView(),
));
}
Passing the Request directly to submit() still works, but is deprecated and has been removed in Symfony 3.0. You should use the method handleRequest() instead.