Не уверен, правильно ли я написал тему, но так или иначе.
Поскольку вы можете создавать определенные маршруты с различными параметрами, например:
_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 самостоятельно.
_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-адрес и перенаправить пользователя.
Примечание. Вам нужно будет получить свою собственную строку запроса 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... }