CakePHP 3.8 изменяет URL-адреса, сгенерированные номерами Paginator, на относительные
В приложении есть несколько маршрутов с префиксом, например:
Router::scope('/ru', function (RouteBuilder $routes) {
$lang = 2;
$routes->setRouteClass(DashedRoute::class);
$routes->connect('/:slug', ['controller' => 'Pages', 'action' => 'pages', 'lang' => $lang])->setPass(['slug']);
$routes->fallbacks(DashedRoute::class);
});
Рассматриваемая страница: http://localhost:8765/ru/smi-o-nas, где есть несколько ссылок на страницы с использованием этого метода:
<?= $this->Paginator->numbers() ?>
Он генерирует ссылки, включая соответствующий контроллер и действие:
http://localhost:8765/ru/pages/pages/smi-o-nas?page=2
Так что маршруты настроены неправильно, или есть возможность заставить Paginator генерировать относительные ссылки, например:
http://localhost:8765/ru/smi-o-nas?page=2
Посмотрел документы, вспомогательный код paginator, но все, что я придумал, - это установка URL-адреса конфигурации Paginator, что по-прежнему не помогает. Используя это:
$this->Paginator->setConfig('options.url', ['controller' => 'ru', 'action' => 'smi-o-nas']);
Просто вставьте / ro / smi-o-nas / посередине для ссылки:
http://localhost:8765/ru/ru/smi-o-nas/smi-o-nas?page=2
Так нужно ли мне настраивать маршруты по-другому или есть возможность использовать относительные URL-адреса?
Обновление. Я выяснил, что относительный URL-адрес не будет работать для пагинатора, так как он приведет к URL-адресам типа "localhost:8765/ru/ru/smi-o-nas/smi-o-nas? Page=2? Page=3"
Хитрое решение
<?php for($page_number = 1; $page_number <= $this->Paginator->counter("{{pages}}"); $page_number ++):?>
<?php if ($page_number == $this->Paginator->counter("{{page}}")): ?>
<span><?= $page_number ?></span>
<?php else : ?>
<a href="<?= $this->Url->build($this->request->here) ?>?page=<?= $page_number ?>"><?= $page_number ?></a>
<?php endif ; ?>
<?php endfor; ?>