我的网站分页urls是这样工作的,但是当我升级到4.x时,它就停止工作了--例如:1页:mywebsite.com/new-2 page: mywebsite.com/new/page/2等等。我这样做的代码如下:
//routes.php
$routes->connect('/new/page/:page',
['controller' => 'Articles', 'action' => 'latest'], [
'pass' => [
'page'
],
'page' => '\d+'
]);
$routes->connect('/new', ['controller' => 'Articles', 'action' => 'latest']);然后,在我的视图/分页元素中,我有以下内容:
//view
$this->Paginator->options(['url' => ['controller' => 'Articles', 'action' => 'latest']]);当直接访问它们时,URL mywebsite.com/new/page/2、3等仍然有效,但是通过视图中的分页器创建的链接是mywebsite.com/new?page=2、3等,而它们应该是mywebsite.com/new/page/2、3等等。
有人能给我指明正确的方向吗?
发布于 2020-03-17 13:22:27
我建议您考虑可能更改URL模式以使用查询参数样式。使用路由/URI元素只意味着要使分页器特性正常工作需要做更多的工作。此外,所有的参数(SEO,可读性,等等)的使用“漂亮的URL”的分页,是如此流行的在过去,原来是什么都是热空气。
尽管如此,您必须使用自定义/扩展分页器助手来更改URL的生成方式,因为默认情况下,助手将显式地将page参数(和所有其他分页相关参数)设置为查询字符串参数。如果覆盖\Cake\View\Helper\PaginatorHelper::generateUrlParams(),则可以控制所有生成的URL。
一个快速而肮脏的例子:
// 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;
}
},这将移动到URL数组中的page参数值,从查询字符串配置转移到常规的URL参数(即转
['controller' => 'Articles', 'action' => 'latest', '?' => ['page' => 1, /* ... */]]转到
['controller' => 'Articles', 'action' => 'latest', 1, '?' => [/* ... */]]但是,我再次强烈建议考虑切换到查询字符串URL模式。
另请参阅
https://stackoverflow.com/questions/60493813
复制相似问题