CakePHP 2.x自定义路由分页

时间:2012-10-16 15:08:38

标签: cakephp routing pagination routes

我有以下自定义路线(工作正常):

Router::connect('/:city', array('controller' => 'dealers', 'action' => 'index'), array('city' => '[a-z]+'));

通过这条路线,我正在尝试获取分页页面2,3,...:

Router::connect('/:city/:id', array('controller' => 'dealers', 'action' => 'index'),
    array(
        'pass' => array('city', 'id'),
        'city' => '[a-z]+',
        'id' => '[0-9]+'
        )
);

第一个问题现在是,如果我输入 domain.com/washington/2 ,它不会将ID传递给Pagination,我仍然会获得第1页。

第二个问题是我没有让Pagination Helper编写上述链接。如果我在我的观点中尝试这个:

$this->Paginator->options(array
    ('url'=> array(
        $city[0]['City']['url'],
        $this->params['id']
        )
    )
);

它仍然给了我:

http://domain.com/dealers/index/washington/page:2

我提前道歉,如果这不是一件容易的事,但我是新手,并且无法通过这里的可用问题/答案或文档来解决这个问题。

更新1:

我现在尝试了以下 domain.com/washington/page/2 ,但它只是路由到分页第1页:

Router::connect('/:city/:slug/:id', 
    array('controller' => 'dealers', 'action' => 'index'),
    array(
        'pass' => array('city', 'slug', 'id'),
        'city' => '[a-z]+',
        'slug' => '[a-z]+',
        'id' => '[0-9]+'
        )
);

在我这样做的行动中:

public function index($slug = null, $id = null) {some code}

在视图中我添加了:

$this->Paginator->options(array('url' => $this->passedArgs));

仍然没有运气,如果有人可以提供帮助,我会非常高兴!

2 个答案:

答案 0 :(得分:2)

我终于通过将其添加到AppController(beforeFilter)来获取网址 domain.com/washington/page/2

if (isset($this->request->params['page'])) {
 $this->request->params['named']['page'] = $this->request->params['page'];
}

并添加此路线:

Router::connect('/:city/page/:page', 
    array('controller' => 'dealers', 'action' => 'index'),
    array(
        'pass' => array('city', 'page'),
        'city' => '[a-z]+',
        'page' => '[0-9]+'
        )
);

但是我真的不明白这里发生了什么,如果这是一个很好的方法。如果有人可以简单解释一下,我有兴趣知道。

答案 1 :(得分:0)

请参阅上面的评论:)

另外,您可能想要使用它:

$this->Paginator->options(array('url' => $this->passedArgs));

这实际上会将URL中的参数传递给paginator helper。