Метод getIterator класса Paginator
Метод getIterator класса Paginator возвращает итератор
по элементам текущей страницы. Это позволяет перебирать
записи пагинатора в цикле foreach так же просто,
как обычный массив. Метод не принимает параметров и реализует
интерфейс IteratorAggregate.
Синтаксис
public function getIterator(): Traversable
Пример
Давайте создадим пагинатор и переберём его элементы
через цикл foreach:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use DoctrineORMEntityManagerInterface;
use DoctrineORMQueryBuilder;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_index')]
public function index(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from('AppEntityArticle', 'a')
->orderBy('a.id', 'ASC');
$paginator = new Paginator($qb, true);
$paginator->getQuery()
->setFirstResult(0)
->setMaxResults(3);
$res = [];
foreach ($paginator->getIterator() as $article) {
$res[] = $article->getTitle();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"article 1, article 2, article 3"
Пример
Давайте переберём элементы пагинатора без явного вызова
метода getIterator - цикл foreach вызовет его
автоматически, так как Paginator реализует
интерфейс IteratorAggregate:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use DoctrineORMEntityManagerInterface;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_index')]
public function index(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from('AppEntityArticle', 'a')
->orderBy('a.id', 'ASC');
$paginator = new Paginator($qb, true);
$paginator->getQuery()
->setFirstResult(0)
->setMaxResults(5);
$res = [];
foreach ($paginator as $article) {
$res[] = $article->getTitle();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"article 1, article 2, article 3, article 4, article 5"
Смотрите также
-
класс
Paginator,
который выполняет пагинацию выборки -
метод
count,
который возвращает количество элементов -
метод
getQuery,
который возвращает объект запроса -
метод
setUseOutputWalkers,
который управляет обходом результатов