不确定我是否正确地写了这个主题。
由于您可以创建具有不同参数的特定路线,例如:
_search:
pattern: /page/{category}/{keyword}
defaults: { _controller: Bundle:Default:page, category: 9, keyword: null }
从使用GET方法的表单到达该路由特定的url格式是否有任何方法?
目前网址是/ page?category = 2?keyword = some + keyword
因为您没有注意到路线格式。
要让它通过这种特定格式,我需要做什么?我真的不知道如何重写页面网址以匹配特定网址的路由设置。即便在普通的PHP中也偶然发现了......
提前致谢。
答案 0 :(得分:5)
它是使用GET方法的HTML表单的默认行为。您需要自己构建该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 thread here,我将在jQuery对象上使用getQueryString
。
(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);
答案 1 :(得分:0)
您可以添加仅匹配/ page
的第二条路线然后在控制器中你可以获得默认值。并将它们与任何传递的东西合并。
看看我为一些代码示例回答的类似问题。
答案 2 :(得分:0)
我也遇到了这个问题,我设法用稍微不同的解决方案来解决它。
您也可以像@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...
}