-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathConfiguration.php
More file actions
89 lines (78 loc) · 2.86 KB
/
Configuration.php
File metadata and controls
89 lines (78 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
declare(strict_types=1);
namespace MsgPhp\EavBundle\DependencyInjection;
use MsgPhp\Domain\DomainId;
use MsgPhp\Domain\Infrastructure\Config\NodeBuilder;
use MsgPhp\Domain\Infrastructure\Config\TreeBuilderHelper;
use MsgPhp\Domain\Infrastructure\DependencyInjection\ConfigHelper;
use MsgPhp\Domain\Infrastructure\DependencyInjection\PackageMetadata;
use MsgPhp\Eav\Attribute;
use MsgPhp\Eav\AttributeId;
use MsgPhp\Eav\AttributeValue;
use MsgPhp\Eav\Command;
use MsgPhp\Eav\Infrastructure\Doctrine as DoctrineInfrastructure;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
/**
* @author Roland Franssen <franssen.roland@gmail.com>
*
* @internal
*/
final class Configuration implements ConfigurationInterface
{
public const PACKAGE_NS = 'MsgPhp\\Eav\\';
public const DOCTRINE_REPOSITORY_MAPPING = [
Attribute::class => DoctrineInfrastructure\Repository\AttributeRepository::class,
];
private const COMMAND_MAPPING = [
Attribute::class => [
Command\CreateAttribute::class => true,
Command\DeleteAttribute::class => true,
],
];
/** @var PackageMetadata|null */
private static $packageMetadata;
public static function getPackageMetadata(): PackageMetadata
{
if (null !== self::$packageMetadata) {
return self::$packageMetadata;
}
return self::$packageMetadata = new PackageMetadata(self::PACKAGE_NS, [
\dirname((string) (new \ReflectionClass(AttributeId::class))->getFileName()),
]);
}
public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = TreeBuilderHelper::create(Extension::ALIAS);
/** @var NodeBuilder $children */
$children = TreeBuilderHelper::root($treeBuilder, Extension::ALIAS)->children();
/**
* @psalm-suppress PossiblyNullReference
* @psalm-suppress PossiblyUndefinedMethod
*/
$children
->classMappingNode('class_mapping')
->requireClasses([Attribute::class, AttributeValue::class])
->subClassValues()
->end()
->classMappingNode('id_type_mapping')
->subClassKeys([DomainId::class])
->end()
->classMappingNode('commands')
->typeOfValues('boolean')
->end()
->scalarNode('default_id_type')
->defaultValue(ConfigHelper::DEFAULT_ID_TYPE)
->cannotBeEmpty()
->end()
->end()
->validate()
->always(static function (array $config): array {
ConfigHelper::resolveCommandMappingConfig(self::COMMAND_MAPPING, $config['class_mapping'], $config['commands']);
return $config;
})
->end()
;
return $treeBuilder;
}
}