PaginatorTrait::getPaginator()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 2
1
<?php
2
3
/*
4
 * doctrine-base-repositories (https://github.com/juliangut/doctrine-base-repositories).
5
 * Doctrine2 utility repositories.
6
 *
7
 * @license MIT
8
 * @link https://github.com/juliangut/doctrine-base-repositories
9
 * @author Julián Gutiérrez <[email protected]>
10
 */
11
12
declare(strict_types=1);
13
14
namespace Jgut\Doctrine\Repository;
15
16
use Zend\Paginator\Adapter\AdapterInterface;
17
use Zend\Paginator\Paginator;
18
19
/**
20
 * Pagination trait.
21
 */
22
trait PaginatorTrait
23
{
24
    /**
25
     * Get configured paginator.
26
     *
27
     * @param AdapterInterface $adapter
28
     * @param int              $itemsPerPage
29
     *
30
     * @return Paginator
31
     */
32
    protected function getPaginator(AdapterInterface $adapter, int $itemsPerPage): Paginator
33
    {
34
        $paginator = new Paginator($adapter);
35
        $paginator->setItemCountPerPage(max(-1, $itemsPerPage));
36
37
        return $paginator;
38
    }
39
40
    /**
41
     * Return paginated elements filtered by criteria or throw an exception if none found.
42
     *
43
     * @param array      $criteria
44
     * @param array|null $orderBy
45
     * @param int        $itemsPerPage
46
     *
47
     * @throws FindException
48
     *
49
     * @return Paginator
50
     */
51
    public function findPaginatedByOrFail(array $criteria, array $orderBy = null, int $itemsPerPage = 10): Paginator
52
    {
53
        $paginator = $this->findPaginatedBy($criteria, $orderBy, $itemsPerPage);
54
55
        if ($paginator->count() === 0) {
56
            throw new FindException('FindPaginatedBy did not return any results');
57
        }
58
59
        return $paginator;
60
    }
61
62
    /**
63
     * Return paginated elements filtered by criteria.
64
     *
65
     * @param array      $criteria
66
     * @param array|null $orderBy
67
     * @param int        $itemsPerPage
68
     *
69
     * @return Paginator
70
     */
71
    abstract public function findPaginatedBy($criteria, array $orderBy = null, int $itemsPerPage = 10): Paginator;
72
}
73