Я бы посоветовал вам рассмотреть возможность изменения схемы URL для использования стиля аргумента запроса. Использование элементов route / URI просто означает больше работы для правильной работы функций пагинатора. Кроме того, все аргументы (SEO, удобочитаемость и т. Д. c), приведенные для использования «красивых URL» для нумерации страниц, которые были так популярны в те дни, оказались ничем иным, как горячим воздухом.
С другой стороны, вам нужно будет использовать настраиваемый / расширенный помощник по разбиению на страницы, чтобы изменить способ генерации URL-адресов, поскольку по умолчанию помощник явно устанавливает параметр page
(и все остальные параметры, связанные с разбиением на страницы) в качестве аргументов строки запроса. Вы можете управлять всеми сгенерированными URL-адресами, если переопределите \Cake\View\Helper\PaginatorHelper::generateUrlParams()
.
Быстрый и грязный пример:
// src/View/Helper/PaginatorHelper.php
/*
Load in `AppView::initialize()` via:
$this->loadHelper('Paginator', [
'className' => \App\View\Helper\PaginatorHelper::class
]);
*/
declare(strict_types=1);
namespace App\View\Helper;
class PaginatorHelper extends \Cake\View\Helper\PaginatorHelper
{
public function generateUrlParams(array $options = [], ?string $model = null, array $url = []): array
{
$params = parent::generateUrlParams($options, $model, $url);
if (isset($params['?']['page'])) {
$params[0] = $params['?']['page'];
unset($params['?']['page']);
} else {
$params[0] = 1;
}
return $params;
}
}
Это приведет к значению параметра page
в массиве URL из Конфигурация строки запроса к обычному параметру URL, ie превращает
['controller' => 'Articles', 'action' => 'latest', '?' => ['page' => 1, /* ... */]]
в
['controller' => 'Articles', 'action' => 'latest', 1, '?' => [/* ... */]]
Но опять же, я настоятельно рекомендую рассмотреть возможность перехода на схему URL строки запроса .
См. Также