Метод count
Метод count класса Paginator возвращает
общее количество элементов в пагинируемой выборке.
Это число не зависит от текущей страницы и
показывает, сколько всего записей соответствует запросу.
Метод не принимает параметров.
Синтаксис
public function count(): int
Пример
Давайте создадим пагинатор для массива из пяти элементов и получим общее количество записей:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentPaginationPaginator;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_index')]
public function index(): Response
{
$items = ['a', 'b', 'c', 'd', 'e'];
$paginator = new Paginator($items, 2);
return new Response((string) $paginator->count());
}
}
?>
Результат выполнения кода:
5
Пример
Давайте сравним значение count с количеством
элементов на текущей странице. Метод getIterator
вернёт только элементы текущей страницы:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentPaginationPaginator;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_index')]
public function index(): Response
{
$items = ['a', 'b', 'c', 'd', 'e'];
$paginator = new Paginator($items, 2);
$total = $paginator->count();
$current = count($paginator->getIterator());
return new Response("total: {$total}, current: {$current}");
}
}
?>
Результат выполнения кода:
"total: 5, current: 2"
Пример
Давайте используем метод count для расчёта
общего количества страниц. Передадим в пагинатор
сущности Doctrine:
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentPaginationPaginator;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_index')]
public function index(ArticleRepository $repository): Response
{
$query = $repository->createQueryBuilder('a')
->orderBy('a.id', 'ASC')
->getQuery();
$paginator = new Paginator($query, 10);
$total = $paginator->count();
$pages = (int) ceil($total / 10);
return new Response("total: {$total}, pages: {$pages}");
}
}
?>
Результат выполнения кода для 25 записей:
"total: 25, pages: 3"
Смотрите также
-
класс
Paginator,
который выполняет пагинацию выборки -
метод
getIterator,
который возвращает элементы текущей страницы -
метод
getQuery,
который возвращает исходный запрос пагинатора -
метод
setUseOutputWalkers,
который управляет стратегией обхода результатов