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 的开头有一个简单的 if 例如:

    $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-relevance
  • 要继续阅读的网址栏:/search/{term}

有人有想法吗?!谢谢

4

1 回答 1

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 & set & sort 的默认值:

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

这样做的好处是您的 $this->Html->link 将反映它们生成的路径中的路由。(反向路由)

cake 中的路由非常强大,你应该可以通过它们获得一些体面的友好 url。我使用的另一件事是使用行为 - sluggable - 从内容项标题生成可搜索字段 - 用于 cms 中的页面/内容类型。

祝你好运!

于 2013-02-26T04:59:15.083 回答