分页器帮助程序包括禁用默认路由时的路由前缀


PaginatorHelper includes routing prefixes when default routes are disabled

我已经禁用了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'

实际上,只有当我启用内置路由时,它才有效。所以我有两个问题:

  1. 如何使PaginatorHelper不预置'/settings'
  2. 如何使分页助手命名参数与我的自定义路由一起使用,以便我可以拥有类似'/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
));