0

该应用程序有一些前缀路由,如下所示:

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; ?>
4

0 回答 0