该应用程序有一些前缀路由,如下所示:
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
查看了文档,分页器帮助代码,但我想出的只是设置分页器配置 url,这仍然没有好处。使用这个:
$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 不适用于分页器,因为它会导致类似“localhost:8765/ru/ru/smi-o-nas/smi-o-nas?page=2?page=3”的 url
狡猾的解决方案
<?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; ?>