PageAction   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 4
dl 0
loc 49
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A __invoke() 0 17 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Web\Action;
6
7
use Page\Service\PageService;
8
use Psr\Http\Message\ResponseInterface as Response;
9
use Psr\Http\Message\ServerRequestInterface as Request;
10
use Zend\Diactoros\Response\HtmlResponse;
11
use Zend\Expressive\Template\TemplateRendererInterface as Template;
12
13
/**
14
 * Class PageAction.
15
 */
16
class PageAction
17
{
18
    /** @var Template */
19
    private $template;
20
21
    /** @var PageService $pageService */
22
    private $pageService;
23
24
    /**
25
     * PageAction constructor.
26
     *
27
     * @param Template    $template
28
     * @param PageService $pageService
29
     */
30
    public function __construct(Template $template, PageService $pageService)
31
    {
32
        $this->template = $template;
33
        $this->pageService = $pageService;
34
    }
35
36
    /**
37
     * Executed when action is invoked.
38
     *
39
     * @param Request       $request
40
     * @param Response      $response
41
     * @param callable|null $next
42
     *
43
     * @throws \Exception
44
     *
45
     * @return HtmlResponse
46
     */
47
    public function __invoke(
48
        Request $request,
49
        Response $response,
50
        callable $next = null
51
    ) {
52
        $urlSlug = $request->getAttribute('url_slug');
53
        $page = $this->pageService->getPageBySlug($urlSlug);
54
55
        if (!$page) {
56
            return $next($request, $response);
57
        }
58
59
        return new HtmlResponse($this->template->render('web::page', [
60
            'layout' => $page->getHasLayout() ? 'layout/web' : false,
61
            'page'   => $page,
62
        ]));
63
    }
64
}
65