你好,
我正在使用 CakePHP 4,并面临分页器链接不尊重我的自定义路由定义的问题。为了给您提供上下文,我设置了一条自定义路线,如下所示:
$builder->connect(
"/categories/{category}",
['controller' => 'Items', 'action' => 'category', 'items'],
['routeClass' => DashedRoute::class, 'pass' => ['items'],]
);
在控制器 ItemsController 中,我定义了类别操作,如下所示:
public function category($item_type_slug)
{
$category_slug = $this->getRequest()->getParam('category');
$this->loadComponent('Paginator');
$items = $this->getItemsCatalog($item_type_slug, $category_slug);
$this->set('items', $items['items'] ? $this->paginate($items['items']) : []);
}
我正在使用 CakePHP 的内置分页来显示项目。访问项目列表的第二页时会出现问题。 Paginator 生成一个遵循 CakePHP 的默认路由模式(“/controller/action/param”)的链接,而不是使用我的自定义路由。因此,到第二页的链接显示为“/items/category/items?page=2”,而不是遵循自定义路由模式“/categories/{category}?page=2”。
我已经搜索了文档和论坛,但没有找到明确的解决方案来使 Paginator 在生成链接时尊重我的自定义路线。如何调整分页器或路由设置,以便分页链接遵循我定义的自定义路由?
任何正确方向的建议或指示将不胜感激。预先感谢您的帮助!
4
8
问题解决了! 问题是我构建路线的方式,这是最好的方法:
$builder->connect(
"/:category/:item",
['controller' => 'Categories', 'action' => 'item'],
[
'routeClass' => DashedRoute::class,
'pass' => ['category', 'item'],
'metier' => '[a-z]+',
'lieu' => '[a-z]+'
]
);