PaginatorHelper включает префиксы маршрутизации, когда маршруты по умолчанию отключены - PullRequest
0 голосов
/ 09 марта 2012

Я отключил маршруты по умолчанию 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. Как сделать так, чтобы именованные параметры PaginatorHelper работали с моими пользовательскими маршрутами, чтобы у меня был URL типа '/users/sort:email/direction:desc'?

Спасибо !!

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Попробуйте использовать эту команду перед выполнением функций сортировки:

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

Это, по сути, устанавливает некоторые значения по умолчанию, которые должен использовать хелпер paginator перед запуском этих функций. Установив settings на false, вы скажете ему не устанавливать этот маршрут.

0 голосов
/ 09 марта 2012

Ответ на мою проблему на самом деле состоит из двух вещей, так как маршруты по умолчанию отключены.

Сначала я должен предоставить именованные параметры для 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
));
...