【问题标题】:CakePHP 3: How to use custom pagination?CakePHP 3:如何使用自定义分页?
【发布时间】:2018-01-06 20:05:11
【问题描述】:

我没有成功使用带有自定义查询的分页。我完全按照文档中的内容进行操作,但它不起作用。关键是对记录列表进行分页,将标志“有效”设置为“Y”或“N”。

在控制器中:

if (!isset($this->request->query['valid']) || $this->request->query['valid'] == '')
  $allFilters['valid'] = 'N';
else
  $allFilters['valid'] = 'Y';
$this->paginate = ['finder' => ['curnames' => $allFilters]];
$data = $this->paginate($this->Names)->toArray();

在模型中:

public $paginate = ['finder' => 'curnames', 'limit' => 25, 'order' => ['Names.id' => 'asc']];

public function findCurnames(Query $query, array $options) {
  $query->where([
    'valid' => $option['valid']
  ]);
  return $query;
}  

当我执行代码时,我得到一个Cake\Network\Exception\NotFoundException 异常。我错过了什么?

更新:版本为 3.3。执行时会触发错误:

$data = $this->paginate($this->Names)->toArray();

更新:在控制器中,我改变了行

$this->paginate = ['finder' => ['curnames' => $allFilters]];

$paginate = ['finder' => ['curnames' => $allFilters]];

并且该错误不再弹出。但不考虑“有效”=“Y”或“N”的条件过滤。所以还是不行。

【问题讨论】:

  • 每当收到错误时,请务必发布complete错误,即包括full堆栈跟踪 (最好从日志中以正确可读的方式复制),即使问题对于熟悉 CakePHP 的人来说可能很明显!还要显示/描述相应的上下文,即显示/突出显示实际触发错误的代码,并请始终提及您的 exact CakePHP 版本 - 谢谢!通常,在收集这些信息时,问题甚至会自行解决。
  • 不要这样做,使用适当的基于 PRG 模式的过滤方法,例如 search。这个插件开箱即用,只需不到 3 行就可以完成同样的事情,您可以稍后在顶部添加大量搜索过滤器。

标签: php cakephp pagination paginator


【解决方案1】:

我得到了答案。错误来自一个错字。正确的代码应该是

'valid' => $options['valid']

带有“s”的选项。 现在可以了。

【讨论】:

    【解决方案2】:

    做这样的事情不是更容易吗(没有任何自定义查找器方法):

    if ($this->request->getQuery('valid', '') == '')
      $valid = 'N';
    else
      $valid = 'Y';
    
    $this->paginate = [
      'limit' => 25,
      'order' => ['Names.id' => 'asc']
    ];
    $query = $this->Names->find('all')
      ->where([
        'valid' => $valid
      ]);
    $data = $this->paginate($query)->toArray();
    

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 2016-01-12
      • 2017-02-13
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多