12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- <?php
- namespace Symfony\Component\PropertyInfo\Extractor;
- use Symfony\Component\PropertyInfo\PropertyListExtractorInterface;
- use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
- class SerializerExtractor implements PropertyListExtractorInterface
- {
- private $classMetadataFactory;
- public function __construct(ClassMetadataFactoryInterface $classMetadataFactory)
- {
- $this->classMetadataFactory = $classMetadataFactory;
- }
-
- public function getProperties(string $class, array $context = []): ?array
- {
- if (!\array_key_exists('serializer_groups', $context) || (null !== $context['serializer_groups'] && !\is_array($context['serializer_groups']))) {
- return null;
- }
- if (!$this->classMetadataFactory->getMetadataFor($class)) {
- return null;
- }
- $properties = [];
- $serializerClassMetadata = $this->classMetadataFactory->getMetadataFor($class);
- foreach ($serializerClassMetadata->getAttributesMetadata() as $serializerAttributeMetadata) {
- $ignored = method_exists($serializerAttributeMetadata, 'isIgnored') && $serializerAttributeMetadata->isIgnored();
- if (!$ignored && (null === $context['serializer_groups'] || array_intersect($context['serializer_groups'], $serializerAttributeMetadata->getGroups()))) {
- $properties[] = $serializerAttributeMetadata->getName();
- }
- }
- return $properties;
- }
- }
|