symfony2:使用表单

时间:2016-03-19 19:27:49

标签: php forms symfony

我需要让用户在应用程序中选择一些参数。所以我创建了一个表单,让用户例如选择一年。

我将表单的操作更改为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并只是“手动”处理表单数据?

1 个答案:

答案 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]);
    }
}