0

我正在研究一个搜索模块。当我搜索某个项目时,该项目的 slug 作为查询字符串在 url 中传递,但我想将其转换为命名参数。为此,我urlToNamed()在自定义组件 RedirectComponent.php 中创建了一个操作。我的代码是:

 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.
 }

问题是我在搜索数据后的 URL 作为查询字符串http://localhost/esolutions/books/index?category=Books,我必须将其转换为命名参数,例如http://localhost/esolutions/books/index/category:Books.

另一个问题是

 $this->controller->redirect($urlArray);

不管用。请给任何建议。提前致谢。

4

1 回答 1

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
}

这将对任何 URL 执行 301 重定向,例如/esolutions/books/index/?category=foo/esolutions/books/index/category:foo

于 2013-10-03T11:32:24.753 回答