Symfony4-提交表单后更改URL中的单个参数

时间:2018-10-11 19:38:39

标签: symfony symfony-forms symfony4

我有一条看起来像这样的路线-route / {parameter},提交表单后需要更改参数。

我尝试使用redirectToRoute,但是它创建了新的URL以及其他一些我不需要的形式传递的参数。

所以我很想问你是否有某种方法可以重定向到新的URL,该URL具有我通过表单中的select选择的唯一参数。

非常感谢您的回复。

编辑:

我将分享更多实际信息。这是我的表单控制器的样子:

$form = $this->createFormBuilder()
    ->setMethod("get")
    ->add('category', ChoiceType::class, [
        'choices' => [
            'Všechny kategorie' => 'vsechny-kategorie',
            'Automobilový průmysl' => 'automobilovy-prumysl',
            'Stavebnictví' => 'stavebnictvi',
            'Elektronika a elektrotechnika' => 'elektronika-a-elektrotechnika',
            'Gastronomie' => 'gastronomie',
            'Lesnictví' => 'lesnictvi',
            'Potravinářský průmysl' => 'potravinarsky-prumysl',
            'IT technologie' => 'it-technologie',
            'Logistika' => 'logistika',
            'Strojírenství' => 'strojirenstvi',
            'Zdravotnictví' => 'zdravotnictvi'
        ],
        'label' => 'Kategorie:'
    ])
    ->add('send', SubmitType::class, ['label' => 'Test'])
    ->getForm();

$form->handleRequest($request);

if($form->isSubmitted() && $form->isValid()) {
    $data = $form->getData();
    $category = $data['category'];

    return $this->redirectToRoute('jobs', [
        'jobs' => $pagination,
        'categoryForm' => $form->createView(),
        'category' => $category,
    ]);
}

2 个答案:

答案 0 :(得分:2)

您应该可以使用redirectToRoute,但请确保传递您要动态设置为数组的参数:

// in your controller action:
return $this->redirectToRoute('post_form_route', ['parameter' => $parameter]);

如果这对您不起作用,我将仔细检查您的路线定义,并确保正确传递了路线的名称和预期的URL参数。

Documentation on redirecting in the controller

答案 1 :(得分:0)

您可以尝试:

if($form->isSubmitted() && $form->isValid()) {
    $data = $form->getData();
    $category = $data['category'];

    return $this->redirectToRoute('route', [
         'parameter' => $form->getData()->getCategory()
     ]);

}

return $this->redirectToRoute('jobs', [
    'jobs' => $pagination,
    'categoryForm' => $form->createView(),
  ]);