CakePHP 2.x Custom Route Pagination

£可爱£侵袭症+ 提交于 2019-12-24 08:34:47

问题


I have a the following custom route (which works fine):

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

With this route, I am trying to get paginated pages 2, 3, …:

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

The first problem now is, that if I enter domain.com/washington/2 it doesn't pass the id to Pagination and I still get page 1.

The second problem is that I do not get the Pagination Helper to write the above link. If I try this in my view:

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

It still gives me:

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

I apologize in advance if this is a no brainer, but I am new to this and couldn't figure it out with the available questions/answers here, or the docs.

UPDATE 1:

I now tried the following for domain.com/washington/page/2 , but it just routes to pagination page 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]+'
        )
);

In the action I am doing this:

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

In the view I added:

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

Still no luck, I'd be very very glad if someone could help out!


回答1:


I finally got the url domain.com/washington/page/2 to work by adding this to AppController (beforeFilter):

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

And by adding this route:

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

However I do not really understand what happens here, and if this is a good way of doing it. If someone could briefly explain, I'd be interested to know.




回答2:


See my comment above :)

Also, you may be wanting to use this:

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

This will essentially pass the arguments from the URL to the paginator helper.



来源:https://stackoverflow.com/questions/12917784/cakephp-2-x-custom-route-pagination

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!