我已经禁用了CakePHP默认路由,并添加了一些我自己的路由。我首先创建了一个路由前缀:
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'
实际上,只有当我启用内置路由时,它才有效。所以我有两个问题:
- 如何使
PaginatorHelper
不预置'/settings'
? - 如何使分页助手命名参数与我的自定义路由一起使用,以便我可以拥有类似
'/users/sort:email/direction:desc'
的 URL?
谢谢!!
尝试在排序函数之前使用此命令:
$this->Paginator->options(array('url' => array_merge(array('settings' => false), $this->passedArgs)));
这实质上为分页器帮助程序设置了一些默认值,以便在运行这些函数之前使用。通过将settings
设置为 false
,您将告诉它不要设置该路由。
我的问题的答案实际上涉及两件事,因为默认路由已被禁用。
首先,我必须为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
));