【问题标题】:Routes pagination Cakephp 3路线分页 Cakephp 3
【发布时间】:2015-09-14 04:28:15
【问题描述】:

我正在使用 CakePHP 3,我想给我的用户分页。 但是,当我单击第二页时,URL 看起来像 /users?page=2,我希望是:/users/2。

我在 routes.php 中创建了这条路线:

$routes->connect('/users/:page', ['controller' => 'users', 'action' => 'index'], ['page' => '[0-9]+']);

在 Users/index.ctp 我放“prev”按钮之前:

<?php
      $this->Paginator->options([
              'url' => [
              'controller' => 'users',
              'action' => 'index'
          ]
      ]);
 ?>

现在,例如,当我单击第 2 页时,/users/2 打开并且我收到了以下错误消息 (RuntimeException):

Unable to locate an object compatible with paginate.

我是否遗漏了什么或哪里出错了?

感谢您的帮助。

【问题讨论】:

  • 您得到的错误与路由或助手的使用无关。请出示您的控制器代码,这就是问题所在
  • 我的用户控制器是使用 cake bake 命令生成的。所以我的索引方法看起来像这样:$this-&gt;set('users', $this-&gt;paginate($this-&gt;Users)); $this-&gt;set('_serialize', ['users']);
  • 你可以在调用分页之前做一个debug($this-&gt;Users) 吗?我认为在你的情况下 $this-&gt;Users 是 false 或出于某种原因是一个空数组。
  • 数组不为空,我得到了这个对象:object(App\Model\Table\UsersTable) { 'registryAlias' =&gt; 'Users', 'table' =&gt; 'users', 'alias' =&gt; 'Users', 'entityClass' =&gt; 'App\Model\Entity\User', 'associations' =&gt; [], 'behaviors' =&gt; [], 'defaultConnection' =&gt; 'default', 'connectionName' =&gt; 'default' }
  • 您是在其他地方调用 paginate 吗?很高兴看到您收到的错误的完整堆栈跟踪

标签: php cakephp pagination routes cakephp-3.0


【解决方案1】:

PaginatorHelper 内置了 url 格式,即使用 ?page=n。它还会进行排序,例如 users?page=2&sort=user_id&direction=asc。您的 /users/{page} 格式无法处理排序。

如果您真的想坚持使用 /users/{page},则必须覆盖 PaginatorHelper。

【讨论】:

  • 目前我不想处理用户排序。我会看到覆盖 PaginatorHelper,但我对 Cakephp 覆盖不是很舒服。我会努力做到的。谢谢
【解决方案2】:

试试这个 在带有分页器组件的控制器中。它对我有用

$this->Paginator->paginate('Users')

用于自定义 urlenter code here 你需要将索引操作实现为

public function index($page = null){
$this->Paginator->settings = ['limit' => 15, 'page' => $page];
$this->set('users', $this->Paginator->paginate('Users'));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2017-02-13
    • 1970-01-01
    • 2012-09-26
    • 2016-12-29
    • 2016-10-09
    • 2012-07-01
    相关资源
    最近更新 更多