CakePHP - Paginação

Se quisermos mostrar um conjunto de dados enorme, podemos usar a paginação e esse recurso está disponível no cake php 4 que é muito fácil de usar.

Temos uma tabela intitulada “artigos” com os seguintes dados -

Vamos usar a paginação para exibir os dados na forma de páginas, em vez de mostrá-los todos juntos.

Exemplo

Faça alterações no arquivo config / routes.php conforme mostrado no programa a seguir.

config / routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('posts',['controller'=>'Posts','action'=>'index']);
   $builder->fallbacks();
});

Criar uma PostsController.php arquivo em src/Controller/PostsController.php.Copie o código a seguir no arquivo do controlador. Ignore, se já tiver criado.

src / Controller / PostsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class PostsController extends AppController {
      public function index(){
         $this->loadModel('articles');
         $articles = $this->articles->find('all')->order(['articles.id ASC']);
         $this->set('articles', $this->paginate($articles, ['limit'=> '3']));
      }
   }
?>

Os dados da tabela de artigos são obtidos usando -

$this->loadModel('articles');
$articles = $this->articles->find('all')->order(['articles.id ASC']);

Para aplicar a paginação e mostraríamos os dados com 3 por registros e o mesmo é feito da seguinte maneira -

$this->set('articles', $this->paginate($articles, ['limit'=> '3']));

Isso é suficiente para ativar a paginação nas tabelas de artigos .

Crie um diretório Posts em src/Template e sob esse diretório crie um Viewarquivo chamado index.php. Copie o código a seguir nesse arquivo.

src / Template / Posts / index.php

<div>
<?php foreach ($articles as $key=>$article) {?>
<a href="#">
   <div>
   <p><?= $article->title ?> </p>
   <p><?= $article->details ?></p>
   </div>
</a>
<br/>
<?php
}
?>
<ul class="pagination">
<?= $this->Paginator->prev("<<") ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next(">>") ?>
</ul>
</div>

A paginação da lista de páginas é feita da seguinte forma -

<ul class="pagination">
<?= $this->Paginator->prev("<<") ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next(">>") ?>
</ul>

Execute o exemplo acima visitando o seguinte URL -

http: // localhost / cakephp4 / posts

Resultado

Ao executar o código, você verá a seguinte saída -

Clique nos números abaixo, para passar para a próxima página, ou use o botão seguinte ou anterior.

For example

Você verá que page = 2 está anexado ao url da página no navegador.