Передача URL-адреса URL-адреса в форму symfony2 с методом get

Не уверен, правильно ли я написал тему, но так или иначе.

Поскольку вы можете создавать определенные маршруты с различными параметрами, например:

_search: pattern: /page/{category}/{keyword} defaults: { _controller: Bundle:Default:page, category: 9, keyword: null } 

есть ли какой-либо путь из формы с методом GET, чтобы получить к этому маршруту определенный формат url?

На данный момент URL-адрес похож на / page? Category = 2? Keyword = some + keyword

Таким образом, вы не можете перейти к формату маршрута, как вы могли заметить.

Что мне нужно сделать, чтобы заставить его работать в этом конкретном формате? Я действительно не знаю, как переписать URL-адрес страницы в соответствии с настройками маршрута для конкретного URL-адреса. Даже в простой php наткнулся на это …

Заранее спасибо.

Это поведение по умолчанию HTML-форм с помощью метода GET. Вам нужно будет создать этот URL самостоятельно.

Обратный путь

  • Недостаток: он делает два запроса на сервер вместо одного
  • Преимущество: он более удобен в обслуживании, потому что URL-адрес построен с использованием службы маршрутизации

Ваш файл маршрутизации

 _search: pattern: /page/{category}/{keyword} defaults: { _controller: Bundle:Default:page, category: 9, keyword: null } _search_endpoint: pattern: /page defaults: { _controller: Bundle:Default:redirect } 

Ваш контроллер

 public function redirectAction() { $category = $this->get('request')->query->get('category'); $keyword = $this->get('request')->query->get('keyword'); // You probably want to add some extra check here and there // do avoid any kind of side effects or bugs. $url = $this->generateUrl('_search', array( 'category' => $category, 'keyword' => $keyword, )); return $this->redirect($url); } 

Внешний вид

Используя Javascript, вы можете самостоятельно создать URL-адрес и перенаправить пользователя.

  • Недостаток: у вас нет доступа к службе маршрутизации (хотя вы можете использовать пакет FOSJsRoutingBundle )
  • Преимущество: вы сохраняете один запрос

Примечание. Вам нужно будет получить свою собственную строку запроса getter, вы можете найти поток Stackoverflow здесь , ниже я буду использовать getQueryString для объекта jQuery.

 (function (window, $) { $('#theFormId').submit(function (event) { var category, keyword; event.preventDefault(); // You will want to put some tests here to make // sure the code behaves the way you are expecting category = $.getQueryString('category'); keyword = $.getQueryString('keyword'); window.location.href = '/page/' + category + '/' + keyword; }): })(window, jQuery); 

Вы можете добавить второй маршрут, который будет просто соответствовать / странице

то в контроллере вы можете получить значения по умолчанию. и объединить их с любыми переданными.

Взгляните на аналогичный вопрос, который я ответил на некоторые примеры кода.

Параметры сетки KendoUI для отправки в приложение symfony2

Я тоже столкнулся с этой проблемой, и мне удалось решить ее с помощью немного другого решения.

Вы также можете изменить маршрут, как @Thomas Potaire, но в том же контроллере, начиная с вашего контроллера:

 /** * @Route("/myroute/{myVar}", name="my_route") */ public function myAction(Request $request, $myVar = null) { if ($request->query->get('myVar') !== null) { return $this->redirectToRoute('my_route', array( 'myVar' => str_replace(' ','+',$request->query->get('myVar')) // I needed this modification here )); } // your code... }