Completed
Pull Request — master (#36)
by Daniel
02:23
created

ViewBuilder::build()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 9.2
c 0
b 0
f 0
cc 3
eloc 13
nc 3
nop 1
1
<?php
2
3
namespace Psi\Component\ContentType\View;
4
5
use Metadata\MetadataFactory;
6
use Metadata\NullMetadata;
7
use Psi\Component\ContentType\FieldLoader;
8
9
use Psi\Component\ContentType\LoadedField;
10
use Symfony\Component\OptionsResolver\OptionsResolver;
11
12
/**
13
 * TODO: This should probably be renamed to "factory"
14
 */
15
class ViewBuilder
16
{
17
    private $fieldLoader;
18
    private $viewRegistry;
19
20
    public function __construct(
21
        FieldLoader $fieldLoader,
22
        ViewRegistry $viewRegistry
23
    ) {
24
        $this->fieldLoader = $fieldLoader;
25
        $this->viewRegistry = $viewRegistry;
26
    }
27
28
    public function createView(string $fieldType, $data, array $options)
29
    {
30
        $fieldService = $this->fieldLoader->load($fieldType, $options);
31
        $viewService = $this->viewRegistry->get($fieldService->getInnerField()->getViewType());
32
        $options = $this->resolveOptions($fieldService, $viewService, $options);
33
34
        $view = new View($options['template']);
35
        $viewService->buildView($view, $data, $options);
36
37
        return $view;
38
    }
39
40
    private function resolveOptions(LoadedField $field, ViewInterface $view, array $options)
0 ignored issues
show
Unused Code introduced by
The parameter $options is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
41
    {
42
        $options = $field->getViewOptions();
43
44
        $viewOptionResolver = new OptionsResolver();
45
        $viewOptionResolver->setDefault('template', null);
46
        $viewOptionResolver->setAllowedTypes('template', ['string', 'null']);
47
48
        $view->configureOptions($viewOptionResolver);
49
        $options = $viewOptionResolver->resolve($options);
50
51
        return $options;
52
    }
53
}
54