2012-03-09 102 views
0

我已经禁用了CakePHP的默认路由并添加了一些我自己的路由。我已经先创建一个路由前缀:当默认路由被禁用时,PaginatorHelper包含路由前缀

Configure::write('Routing.prefixes', array('settings)); 

然后,我增加了一些路线:

Router::connect('/users', array('controller' => 'users', 'action' => 'index', 'settings' => true)); 
Router::connect('/users/add', array('controller' => 'users', 'action' => 'add', 'settings' => true)); 
Router::connect('/users/:id', array('controller' => 'users', 'action' => 'view', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/edit', array('controller' => 'users', 'action' => 'edit', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/delete', array('controller' => 'users', 'action' => 'delete', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 

Html::link方法建立联系的作品很正确:

$this->Html->link('Users', '/users') 

产生

'/users' 

UsersController内的操作如预期的那样为settings_index

然而,PaginatorHelper::sort预规划/settings,像这样:

'/settings/users/index/sort:username/direction:asc' 

如果我启用内置的路线,实际上只适用。所以,我有两个问题:

  1. 我怎样才能让PaginatorHelper不加前缀'/settings'
  2. 如何使PaginatorHelper命名参数与我的自定义路由一起工作,以便我可以拥有像'/users/sort:email/direction:desc'这样的URL?

谢谢!!

+0

当您尝试使用Router :: url()生成链接时会发生什么? – 2012-03-09 15:31:19

回答

0

由于默认路由被禁用,我的问题的答案实际上涉及两件事情。

首先,我必须为PaginationHelper提供命名参数:

Router::connectNamed(array(
    'sort' => array('action' => 'index', 'controller' => array('users')), 
    'direction' => array('action' => 'index', 'controller' => array('users')), 
)); 

然后,我必须使用分页提供控制器和行动路线:

Router::connect('/users/index/*', array(
    'controller' => 'users', 
    'action' => 'index', 
    'settings' => true 
)); 

重要的是说,这条航线应该在'/users'开始的路线末尾。否则,星号将优先。所以我最后一组路线如下所示:

Router::connectNamed(array(
    'sort' => array('action' => 'index', 'controller' => array('users')), 
    'direction' => array('action' => 'index', 'controller' => array('users')), 
)); 

Router::connect('/users', array('controller' => 'users', 'action' => 'index', 'settings' => true)); 
Router::connect('/users/add', array('controller' => 'users', 'action' => 'add', 'settings' => true)); 
Router::connect('/users/:id', array('controller' => 'users', 'action' => 'view', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/edit', array('controller' => 'users', 'action' => 'edit', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/delete', array('controller' => 'users', 'action' => 'delete', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 

Router::connect('/users/index/*', array(
    'controller' => 'users', 
    'action' => 'index', 
    'settings' => true 
)); 
1

尝试之前,你的排序功能,使用此命令:

$this->Paginator->options(array('url' => array_merge(array('settings' => false), $this->passedArgs))); 

这本质上设置了一些默认的分页程序助手运行这些功能之前使用。通过将settings设置为false,您会告诉它不要设置该路线。