如何改变表单的Action和Method
默认情况下,表单想要提交,需要将一个Http的POST请求,提交到这个被渲染表单的同一URL下。有时你想改变这些参数。你有一些不同的方法可以实现它。
如果你使用FormBuilder去构建你的表单,你就可以使用setAction()
和setMethod()
:
1 2 3 4 5 6 7 |
$form = $this->createFormBuilder($task)
->setAction($this->generateUrl('target_route'))
->setMethod('GET')
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class)
->getForm(); |
这个例子假设您已经创建了一个名为target_route
的路由,指向处理表单的控制器。
当使用表单类型类时,你就能够把action和method作为表单配置传入:
1 2 3 4 5 6 7 |
use AppBundle\Form\Type\TaskType;
// ...
$form = $this->createForm(TaskType::class, $task, array(
'action' => $this->generateUrl('target_route'),
'method' => 'GET',
)); |
最后,你可以通过form()
和form_start()
去覆盖模版中的action和method:
1 2 |
{# app/Resources/views/default/new.HTML.twig #}
{{ form_start(form, {'action': path('target_route'), 'method': 'GET'}) }} |
1 2 3 4 5 |
<!-- app/Resources/views/default/newAction.html.php -->
<?php echo $view['form']->start($form, array(
'action' => $view['router']->path('target_route'),
'method' => 'GET',
)) ?> |
如果这些表单方法不是GET或者POST,但是是PUT、PATCH和DELETE,那么symfony会插入一个名字为_method
的隐藏字段来存储方法。如果form表单提交一个普通的POST请求,symfony路由会检测_method
参数并解析PUT、PATCH和DELETE请求。参见http_method_override选项。