Passed
Push — master ( 67783c...f2b326 )
by Aleksei
11:31
created

PaginationFactory::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 0
c 0
b 0
f 0
dl 0
loc 4
ccs 1
cts 1
cp 1
rs 10
cc 1
nc 1
nop 2
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Spiral\Http;
6
7
use Psr\Container\ContainerInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Spiral\Core\Attribute\Scope;
10
use Spiral\Core\Exception\ScopeException;
11
use Spiral\Core\FactoryInterface;
12
use Spiral\Framework\Spiral;
13
use Spiral\Pagination\PaginationProviderInterface;
14
use Spiral\Pagination\Paginator;
15
use Spiral\Pagination\PaginatorInterface;
16
17
/**
18
 * Paginators factory binded to active request scope in order to select page number.
19
 */
20
#[Scope(Spiral::HttpRequest)]
21
final class PaginationFactory implements PaginationProviderInterface
22
{
23 4
    public function __construct(
24
        private readonly ContainerInterface $container,
25
        private readonly FactoryInterface $factory
26
    ) {
27 4
    }
28
29
    /**
30
     * @throws ScopeException When no request are available.
31
     */
32 3
    public function createPaginator(string $parameter, int $limit = 25): PaginatorInterface
33
    {
34 3
        if (!$this->container->has(ServerRequestInterface::class)) {
35
            throw new ScopeException('Unable to create paginator, no request scope found');
36
        }
37
        /**
38
         * @var array $query
39
         */
40 3
        $query = $this->container->get(ServerRequestInterface::class)->getQueryParams();
41
42
        //Getting page number
43 2
        $page = 0;
44 2
        if (!empty($query[$parameter]) && \is_scalar($query[$parameter])) {
45 1
            $page = (int)$query[$parameter];
46
        }
47
48 2
        return $this->factory->make(Paginator::class, ['limit' => $limit, 'parameter' => $parameter])->withPage($page);
49
    }
50
}
51