Symfony4 - изменить один параметр в URL-адресе после отправки формы

У меня есть маршрут, который выглядит так - route / {параметр}, и мне нужно изменить параметр после отправки формы.

Я попытался использовать redirectToRoute, но он создал новый 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,
    ]);
}

Вы пытаетесь динамически изменить конечную точку формы до на действие POST или вы пытаетесь изменить перенаправление пользователя после, конечная точка обработала форму?

Dylan Pierce 11.10.2018 22:00

@DylanPierce Я делаю фильтрацию по списку. Фильтрация работает нормально, но мне нужно написать имя категории, которая используется в качестве фильтра в URL-адресе, чтобы она выглядела, например, так: domain.com/list/category

Lukas Hirt 11.10.2018 22:58

$category - это строка или объект?

Dylan Pierce 15.10.2018 16:50

Это строка.

Lukas Hirt 15.10.2018 23:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
4
100
2

Ответы 2

Вы должны иметь возможность использовать redirectToRoute, но не забудьте передать параметр, который вы пытаетесь динамически установить в виде массива:

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

Если это не сработает для вас, я бы дважды проверил определения ваших маршрутов и убедился, что имя вашего маршрута и ожидаемые параметры URL-адреса переданы правильно.

Документация по перенаправлению в контроллере

Проблема в том, что он возвращает URL-адрес, который длиннее, чем все символы, доступные для этого комментария. Вот как у меня код: return $this->redirectToRoute('jobs', [ 'jobs' => $pagination, 'categoryForm' => $form->createView(), 'category' => $category ]);

Lukas Hirt 11.10.2018 22:56

Трудно сказать, но я бы предположил, что один из параметров URL-адреса, который вы передаете, является очень большим объектом, но вместо этого должен быть одним атрибутом или небольшим массивом.

Dylan Pierce 12.10.2018 20:22

Я передаю категорию параметра, и он находится в URL-адресе, как и должно быть, но затем он также передает всю информацию о форме в качестве параметра, имя формы, ее дочерние элементы, выбранное значение ... И это то, что я пытаюсь предотвратить (пока безуспешно).

Lukas Hirt 13.10.2018 21:51

вы можете попробовать это:

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(),
  ]);

Другие вопросы по теме