CakePHP 4:分页器链接不遵循自定义路由的问题求助
解决CakePHP 4分页器链接不匹配自定义路由的问题
步骤1:修正并命名自定义路由
首先调整路由配置,修正pass参数的错误,并为路由添加唯一名称,这样分页器能通过名称反向生成正确URL:
$builder->connect( "/categories/{category}", ['controller' => 'Items', 'action' => 'category', 'items'], [ 'routeClass' => DashedRoute::class, 'pass' => ['category'], // 原配置的'pass'参数错误,需对应路由占位符{category} 'name' => 'category-items' // 添加路由名称,用于反向生成URL ] );
步骤2:在控制器中配置分页器路由参数
在ItemsController的category方法里,初始化分页器时指定要使用的路由名称及必要参数:
public function category($item_type_slug) { $category_slug = $this->getRequest()->getParam('category'); // 加载分页器时配置路由选项 $this->loadComponent('Paginator', [ 'options' => [ 'route' => 'category-items', // 指定目标路由名称 'pass' => [ 'category' => $category_slug // 传递路由所需的category参数 ] ] ]); $items = $this->getItemsCatalog($item_type_slug, $category_slug); $this->set('items', $items['items'] ? $this->paginate($items['items']) : []); }
可选:视图层显式指定路由参数
如果控制器配置后仍有异常,可在模板中调用分页器助手时直接指定URL规则:
// 示例:templates/Items/category.php 中渲染分页页码 echo $this->Paginator->numbers([ 'url' => [ 'route' => 'category-items', 'category' => $category_slug ] ]);
核心说明
分页器默认会沿用当前请求的路由规则,但未命名的自定义路由无法被自动匹配。通过给路由命名并在分页器中指定路由名称,就能强制生成符合自定义规则的分页链接;同时要确保路由的pass参数与占位符一一对应,否则参数无法正确传递。
内容的提问来源于stack exchange,提问作者LoickMEYER
相关产品推荐
相关产品推荐

