|
23 | 23 | use Sylius\Component\Resource\Factory\FactoryInterface as LegacyFactoryInterface; |
24 | 24 | use Sylius\Resource\Factory\Factory; |
25 | 25 | use Sylius\Resource\Factory\FactoryInterface; |
| 26 | +use Sylius\Resource\Metadata\AsOperationMutator; |
26 | 27 | use Sylius\Resource\Metadata\AsResource; |
| 28 | +use Sylius\Resource\Metadata\AsResourceMutator; |
27 | 29 | use Sylius\Resource\Metadata\Metadata; |
| 30 | +use Sylius\Resource\Metadata\OperationMutatorInterface; |
28 | 31 | use Sylius\Resource\Metadata\ResourceMetadata; |
| 32 | +use Sylius\Resource\Metadata\ResourceMutatorInterface; |
29 | 33 | use Sylius\Resource\Reflection\ClassReflection; |
30 | 34 | use Sylius\Resource\State\ProcessorInterface; |
31 | 35 | use Sylius\Resource\State\ProviderInterface; |
|
34 | 38 | use Symfony\Component\Config\FileLocator; |
35 | 39 | use Symfony\Component\Config\Loader\LoaderInterface; |
36 | 40 | use Symfony\Component\Config\Resource\DirectoryResource; |
| 41 | +use Symfony\Component\DependencyInjection\ChildDefinition; |
37 | 42 | use Symfony\Component\DependencyInjection\ContainerBuilder; |
38 | 43 | use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; |
39 | 44 | use Symfony\Component\DependencyInjection\Exception\RuntimeException; |
@@ -76,6 +81,36 @@ public function load(array $configs, ContainerBuilder $container): void |
76 | 81 | $this->loadPersistence($config['drivers'], $config['resources'], $loader, $container); |
77 | 82 | $this->loadResources($config['resources'], $container); |
78 | 83 |
|
| 84 | + $container->registerAttributeForAutoconfiguration( |
| 85 | + AsResourceMutator::class, |
| 86 | + static function (ChildDefinition $definition, AsResourceMutator $attribute, \Reflector $reflector): void { |
| 87 | + if (!$reflector instanceof \ReflectionClass) { |
| 88 | + return; |
| 89 | + } |
| 90 | + |
| 91 | + if (!is_a($reflector->name, ResourceMutatorInterface::class, true)) { |
| 92 | + throw new RuntimeException(\sprintf('Resource mutator "%s" should implement %s', $reflector->name, ResourceMutatorInterface::class)); |
| 93 | + } |
| 94 | + |
| 95 | + $definition->addTag('sylius.resource_mutator', [ |
| 96 | + 'resourceClass' => $attribute->resourceClass, |
| 97 | + ]); |
| 98 | + }, |
| 99 | + ); |
| 100 | + |
| 101 | + $container->registerAttributeForAutoconfiguration( |
| 102 | + AsOperationMutator::class, |
| 103 | + static function (ChildDefinition $definition, AsOperationMutator $attribute, \ReflectionClass $reflector): void { |
| 104 | + if (!is_a($reflector->name, OperationMutatorInterface::class, true)) { |
| 105 | + throw new RuntimeException(\sprintf('Operation mutator "%s" should implement %s', $reflector->name, OperationMutatorInterface::class)); |
| 106 | + } |
| 107 | + |
| 108 | + $definition->addTag('sylius.operation_mutator', [ |
| 109 | + 'operationName' => $attribute->operationName, |
| 110 | + ]); |
| 111 | + }, |
| 112 | + ); |
| 113 | + |
79 | 114 | $container->registerForAutoconfiguration(ProviderInterface::class) |
80 | 115 | ->addTag('sylius.state_provider') |
81 | 116 | ; |
|
0 commit comments