我需要让用户在应用程序中选择一些参数。所以我创建了一个表单,让用户例如选择一年。
我将表单的操作更改为GET
,并将其name
更改为null
。提交表单时,会在网址中添加经典的url-query-string-parameter。
但是我正在使用symfony-routes,我想让提交表单的结果改变一个路由参数。
这是一个清晰的例子:假设我使用这样的路线:
@Route("/assignment/{year}", name="assignment")
function indexAction($year){...}
然后我想通过提交像这样的表格来改变年份路线参数。
$this->get('form.factory').createNamedBuilder(null, FormType::class)
->setAction('get')
->add('year', ChoiceType::class, ['choices' => [2016 => 2016, 2022 => 2022]])
->add('submit', SubmitType::class);
有没有办法存档,而无需添加额外的JavaScript? 如果无法存档,最佳选择方法是什么?删除route-parameter并只是“手动”处理表单数据?
答案 0 :(得分:0)
如果表单也在/assignment/{year}
路线上,那么这可能是一个想法。
在indexAction()
功能中,您可以检查表单是否已提交,如果是,则重定向回到表单中选择年份的路线。
//SomethingController.php
public function indexAction($year, Request $request)
{
//...
$form = $this->get('form.factory'). // You know the rest
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Do some stuff depending on values of form if you'd like, and then
$this->redirectToRoute('assignment', ['year' => $year]);
}
}