1

我有以下自定义路线(效果很好):

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));

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

4

2 回答 2

2

我终于通过将它添加到 AppController (beforeFilter)使 url 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]+'
        )
);

但是,我真的不明白这里发生了什么,以及这是否是一种好方法。如果有人可以简要解释一下,我很想知道。

于 2012-10-17T09:31:40.197 回答
0

请参阅我上面的评论:)

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

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

这实际上会将参数从 URL 传递给分页器助手。

于 2012-10-16T15:37:32.543 回答