Passed
Push — master ( 4bc399...bccef6 )
by Alexander
13:25
created

Controller::renderPartial()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
c 0
b 0
f 0
dl 0
loc 5
rs 10
cc 1
nc 1
nop 2
1
<?php
2
3
namespace App;
4
5
use Psr\Http\Message\ResponseInterface;
6
use Yiisoft\Aliases\Aliases;
7
use Yiisoft\View\ViewContextInterface;
8
use Yiisoft\View\WebView;
9
use Yiisoft\Yii\Web\User\User;
10
use Yiisoft\Yii\Web\Data\DataResponseFactoryInterface;
11
12
abstract class Controller implements ViewContextInterface
13
{
14
    protected DataResponseFactoryInterface $responseFactory;
15
    protected User $user;
16
17
    private Aliases $aliases;
18
    private WebView $view;
19
    private string $layout;
20
21
    public function __construct(
22
        DataResponseFactoryInterface $responseFactory,
23
        User $user,
24
        Aliases $aliases,
25
        WebView $view
26
    ) {
27
        $this->responseFactory = $responseFactory;
28
        $this->user = $user;
29
        $this->aliases = $aliases;
30
        $this->view = $view;
31
        $this->layout = $aliases->get('@views') . '/layout/main';
32
    }
33
34
    protected function render(string $view, array $parameters = []): ResponseInterface
35
    {
36
        $contentRenderer = fn () => $this->renderProxy($view, $parameters);
37
38
        return $this->responseFactory->createResponse($contentRenderer);
39
    }
40
41
    protected function renderPartial(string $view, array $parameters = []): ResponseInterface
42
    {
43
        $content = $this->view->render($view, $parameters, $this);
44
45
        return $this->responseFactory->createResponse($content);
46
    }
47
48
    private function renderProxy(string $view, array $parameters = []): string
49
    {
50
        $content = $this->view->render($view, $parameters, $this);
51
        $user = $this->user->getIdentity();
52
        $layout = $this->findLayoutFile($this->layout);
53
54
        if ($layout === null) {
0 ignored issues
show
introduced by
The condition $layout === null is always false.
Loading history...
55
            return $content;
56
        }
57
        return $this->view->renderFile(
58
            $layout,
59
            [
60
                'content' => $content,
61
                'user' => $user,
62
            ],
63
            $this
64
        );
65
    }
66
67
    public function getViewPath(): string
68
    {
69
        return $this->aliases->get('@views') . '/' . $this->getId();
70
    }
71
72
    private function findLayoutFile(?string $file): ?string
73
    {
74
        if ($file === null) {
75
            return null;
76
        }
77
78
        if (pathinfo($file, PATHINFO_EXTENSION) !== '') {
79
            return $file;
80
        }
81
82
        return $file . '.' . $this->view->getDefaultExtension();
83
    }
84
85
    abstract protected function getId(): string;
86
}
87