怎么在CakePHP中进行数据分页
更新时间:2023-10-091. 在Controller中设置分页
// src/Controller/PostsController.php public function index() { $this->paginate=[ 'limit'=> 10, 'order'=> [ 'created'=> 'DESC' ] ]; $posts=$this->paginate($this->Posts); $this->set(compact('posts')); }
在Controller中设置分页的第一步是配置paginate属性。limit属性代表每页显示的条目数量,order属性代表排序方式。这里我们按照创建时间倒序排列。然后通过paginate方法分页获取Posts模型中的数据,并将数据传递给视图。
2. 在View中显示分页
// src/Template/Posts/index.ctp
# | Title | Created |
---|---|---|
<?=$post->id ?> | <?=$this->Html->link($post->title, ['action'=> 'view', $post->id]) ?> | <?=$post->created->format('Y-m-d H:i:s') ?> |
在View中,我们通过foreach循环显示所有的posts数据,并使用HtmlHelper中的link方法为每个post生成一个链接。paginate方法会生成一个PaginatorHelper实例,我们可以通过PaginatorHelper中的prev、numbers、next方法来显示分页导航条。
3. 创建页码样式
/* webroot/css/app.css */ .pagination li { display: inline-block; padding: 5px; border: 1px solid #e6e6e6; } .pagination li.active { background-color: #337ab7; color: white; }
除了生成分页导航条,PaginatorHelper还允许我们设置分页导航条的HTML元素。通过CSS样式我们可以配置导航条的外观,这里我们将分页导航条设置为一个水平的列表。
4. 分页查询结果
// src/Controller/PostsController.php use Cake\ORM\TableRegistry; public function index() { $query=TableRegistry::getTableLocator()->get('Posts')->find(); $paginate=$query->paginate([ 'limit'=> 10, 'order'=> [ 'created'=> 'DESC' ] ]); $this->set(compact('paginate')); }
除了在Controller中设置分页属性,我们还可以在查询结果时进行分页,通过TableRegistry获取Posts表的查询实例,然后调用paginate方法将查询结果分页,将分页查询结果传递给视图。