72 lines
1.5 KiB
PHP
72 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Base\Util;
|
|
|
|
use Doctrine\ORM\Query;
|
|
use Doctrine\ORM\QueryBuilder;
|
|
use Doctrine\ORM\Tools\Pagination\Paginator as OrmPaginator;
|
|
|
|
class Paginator
|
|
{
|
|
/**
|
|
* @var integer
|
|
*/
|
|
private $total;
|
|
|
|
/**
|
|
* @var integer
|
|
*/
|
|
private $lastPage;
|
|
|
|
private $items;
|
|
|
|
public $currentPage = 1;
|
|
|
|
public $limit = 5;
|
|
|
|
/**
|
|
* @param QueryBuilder|Query $query
|
|
* @param int $page
|
|
* @param int $limit
|
|
* @return Paginator
|
|
*/
|
|
public function paginate($query, int $page = 1, int $limit = 5): Paginator
|
|
{
|
|
$paginator = new OrmPaginator($query);
|
|
|
|
$paginator
|
|
->getQuery()
|
|
->setFirstResult($limit * ($page - 1))
|
|
->setMaxResults($limit);
|
|
|
|
$this->total = $paginator->count();
|
|
$this->lastPage = (int) ceil($paginator->count() / $paginator->getQuery()->getMaxResults());
|
|
$this->items = $paginator;
|
|
$this->currentPage = $page;
|
|
$this->limit = $limit;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getTotal(): int
|
|
{
|
|
return $this->total;
|
|
}
|
|
|
|
public function getLastPage(): int
|
|
{
|
|
return $this->lastPage;
|
|
}
|
|
|
|
public function getItems()
|
|
{
|
|
return $this->items;
|
|
}
|
|
|
|
public function getShowing()
|
|
{
|
|
$showingStart = ($this->currentPage - 1) * $this->limit;
|
|
$showingEnd = $showingStart + $this->limit;
|
|
return sprintf("Showing %d - %d of %d results.", $showingStart, $showingEnd, $this->total);
|
|
}
|
|
} |