Completed
Push — master ( 4bf606...5c7327 )
by Julián
01:29
created

PaginatorTrait   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 0
dl 0
loc 51
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getPaginator() 0 7 1
A findPaginatedByOrFail() 0 10 2
findPaginatedBy() 0 1 ?
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 \DomainException
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 \DomainException('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