我正在研究搜索模块。当我搜索某个项目时,该项目的slug作为查询字符串在url中传递,但我想将其转换为命名参数。为此,我在自定义组件RedirectComponent.php中创建了一个urlToNamed()
操作。我的代码是:
RedirectComponent.php
function urlToNamed() {
$urlArray = $this->controller->params->query;
if(!empty($urlArray)){
#remove unset values
$urlArray = array_filter($urlArray);
$this->controller->redirect($urlArray);
}
}
I am calling the urlToNamed() action from index action of BooksController.php i.e
public function index() {
$this->Redirect->urlToNamed();
//All other stuff to handle named parameter data and show result.
}
问题是我的网址搜索后的数据是http://localhost/esolutions/books/index?category=Books
之类的查询字符串,我必须将其转换为http://localhost/esolutions/books/index/category:Books
之类的命名参数。
另一个问题是
$this->controller->redirect($urlArray);
无效。请提出任何建议。提前谢谢。
答案 0 :(得分:0)
如果您需要将查询字符串参数更改为命名参数,那么我只需将此功能添加到您的index()
操作中:
public function index($category = null) {
if (isset($this->request->query['category'])) {
$this->redirect(array('category' => $this->request->query['category']), 301);
}
// rest of index code as normal
}
这将对 / esolutions / books / index /?category = foo 等任何网址执行301重定向到 / esolutions / books / index / category:foo 。