CakePHP路由与分页

时间:2011-11-20 10:15:16

标签: cakephp routing pagination

其他用户似乎已经出现这种情况,但我没有看到与我想要达到的目标相关的答案。

所以基本上我在/admin/portfolio/

有我的投资组合的管理面板

当我转到下一页时,我得到了这个:/admin/portfolio/index/page:2/admin/portfolio/index/page:1

1.。)如何从网址中删除索引?所以它只是/admin/portfolio/page:2

2.。)如何使page:1只是/admin/portfolio/并且如果有人试图转到第1页然后它只是改变网址/将它们重定向到只有索引而没有参数。否则就意味着我的第一页有重复。

正如我之前所说,我已经在线查看了一些示例,但它们看起来都很混乱,并且与我使用的代码不一样(见下文)所以我不确定如何实现我正在做的事情。< / p>

    <?php echo $this->Paginator->numbers(); ?>

    <?php echo $this->Paginator->prev('« Previous', null, null, array('class' => 'disabled')); ?>
    <?php echo $this->Paginator->next('Next »', null, null, array('class' => 'disabled')); ?> 

    <?php echo $this->Paginator->counter(); ?>

我试过这个:

<?php $this->Paginator->options(array('url'=>array(
'admin'=>true,
'controller' => 'portfolio', 
  'action' => 'index'))); ?>

但我仍然在网址

中获取索引

但是添加这个:Router::connect('/admin/portfolio/*',array('admin'=>true,'controller'=>'portfolio','action'=>'index'));确实从url中删除了索引但这会导致第二个问题,即任何内容都可以添加到url中,因此不再严格,并且在查看虚假页面时显示404 / p>

所以我也试过了:

Router::connect('/admin/portfolio/:page',
                    array('admin'=>true,'controller'=>'portfolio','action'=>'index',
                    array(
                     'pass' => array('page'),
                     'page'=> '[0-9]+'
                      )));

但这不起作用,因为路由没有看到页面!

1 个答案:

答案 0 :(得分:1)

我建议明确声明您的投放组合路线。这样,您就不会干扰应用程序中的任何其他控制器/操作。

考虑到这一点,您的应用程序的投资组合部分的路由定义将如下所示:

/**
 * add, edit and delete actions
 */
Router::connect('/admin/portfolio/add', array(
  'controller' => 'portfolio', 'action' => 'add', 'admin' => true
));
Router::connect('/admin/portfolio/delete/:id', array(
  'controller' => 'portfolio', 'action' => 'delete', 'admin' => true), array(
    'pass' => array('id')
  )
);
Router::connect('/admin/portfolio/edit/:id', array(
  'controller' => 'portfolio', 'action' => 'edit', 'admin' => true), array(
    'pass' => array('id')
  )
);

/**
 * index action
 */
Router::connect('/admin/portfolio', array(
  'controller' => 'portfolio', 'action' => 'index', 'admin' => true, 'page' => 1
));
Router::connect('/admin/portfolio/*', array(
  'controller' => 'portfolio', 'action' => 'index', 'admin' => true), array(
    'named' =>
      array('page' => '[\d]+'),
  )
);