ViewRenderer::setViewResolver()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Core\ControllerDispatcher;
4
5
use Core\ViewModel;
6
use Core\View\ViewEngineInterface;
7
use Core\View\ViewResolverInterface;
8
9
class ViewRenderer
10
{
11
    private $viewEngineConfig = [];
12
    private $viewResolvers = [];
13
14
    /**
15
     * @var ViewModel
16
     */
17
    private $viewModel;
18
19
20
    public function setViewEngineConfig(array $config)
21
    {
22
        $this->viewEngineConfig = $config;
23
    }
24
25
    public function setViewResolver(array $viewResolvers)
26
    {
27
        $this->viewResolvers = $viewResolvers;
28
    }
29
30
    public function setViewModel(ViewModel $viewModel)
31
    {
32
        $this->viewModel = $viewModel;
33
    }
34
35
    public function renderView($controllerResult)
36
    {
37
        $view = $this->resolveView($controllerResult);
38
39
        foreach ($this->viewModel->getVariables() as $key => $value) {
40
            $view->set($key, is_object($value) ? clone $value : $value);
41
        }
42
43
        return $view->render();
44
    }
45
46
    /**
47
     * @param  mixed $controllerResult
48
     * @return ViewEngineInterface
49
     */
50
    public function resolveView($controllerResult)
51
    {
52
        foreach ($this->viewResolvers as $name => $resolverClassName) {
53
            /** @var ViewResolverInterface $resolver */
54
            $resolver = new $resolverClassName();
55
            $resolver->setViewEngineConfig(
56
                isset($this->viewEngineConfig[$name])
57
                    ? $this->viewEngineConfig[$name]
58
                    : []
59
            );
60
61
            $view = $resolver->resolve($controllerResult);
62
63
            if ($view !== null) {
64
                return $view;
65
            }
66
        }
67
    }
68
}
69