CakePHP:在routes.php中重定向

时间:2013-02-05 00:51:48

标签: php cakephp redirect cakephp-2.1

好吧,我不知道我是否采取了错误的做法,但我被困在这里......

我们已经开发了我们的网站,我们有许多控制器需要id和特殊变量,链接已经重定向到控制器传递预期的内容。

新要求是使用 friendlyUrls ,其理念是:而不是:

  

http://domain.com/search/advanced/term:head/city:/set:show-all/sort:basic-relevance

现在读取

  

http://domain.com/search/head

或传递选项。

  

http://domain.com/search/in-edinburgh-scotland/by-rating/head

我的想法是,在Routes.php的开头有一个简单的如果:

    $friendlyUrl = $_SERVER['REQUEST_URI'];
    $friendlyUrl = split('/', $friendlyUrl);
    foreach ($friendlyUrl as $key => $params) {
        if(empty($params)){
            unset($friendlyUrl[$key]);
        }
        if($params == 'search'){
           Router::connect('/search/*', array('plugin'=>'Search','controller' => 'Search', 'action' => 'advancedSearch', 'term'=>'head));

        }elseif ($params == 'employers') {
            # code...
        }elseif ($params == 'employer-reviews') {
            # code...
        }elseif ($params == 'jobs') {
            # code...
        }
    }

那不起作用,然后我尝试在我的 AppController 中添加类似的东西,什么都没有。

总而言之,必须做的是:

  • 网址格式为:/ search / {term}
  • 实际上是重定向到:/ search / advanced / {term} / city:{optional} / set:show-all / sort:basic-relevant
  • 要继续阅读的网址栏:/ search / {term}

任何人都有想法?!谢谢

1 个答案:

答案 0 :(得分:2)

你肯定想看一下书中的路由页面

http://book.cakephp.org/2.0/en/development/routing.html

有很多选项可以匹配url模式以将参数传递给控制器​​。

Router::connect(
'/search/:term', 
array('controller' => 'search', 'action' => 'advanced'),
array(
    'pass' => array( 'term')
)
);

你应该设置city&的默认值。集&在动作函数参数定义中排序:

public function advanced($term, $city='optional', $sort = 'basic'){
     // your codes
}

这样做的好处是,你的$ this-> Html->链接将反映他们生成的路径中的路线。 (反向路由)

蛋糕中的路线非常强大,你应该能够得到一些体面的友好网址。我使用的另一件事是使用行为 - 缓慢 - 从内容项标题生成可搜索字段 - 用于cms中的页面/内容类型。

祝你好运!