vendor/vich/uploader-bundle/src/Metadata/Driver/YamlDriver.php line 57

Open in your IDE?
  1. <?php
  2. namespace Vich\UploaderBundle\Metadata\Driver;
  3. use Metadata\ClassMetadata as JMSClassMetadata;
  4. use Metadata\Driver\AbstractFileDriver;
  5. use Symfony\Component\Yaml\Yaml as YmlParser;
  6. use Vich\UploaderBundle\Metadata\ClassMetadata;
  7. /**
  8. * @author Kévin Gomez <contact@kevingomez.fr>
  9. * @author Konstantin Myakshin <koc-dp@yandex.ru>
  10. */
  11. class YamlDriver extends AbstractFileDriver
  12. {
  13. /**
  14. * {@inheritdoc}
  15. */
  16. protected function loadMetadataFromFile(\ReflectionClass $class, string $file): ?JMSClassMetadata
  17. {
  18. $config = $this->loadMappingFile($file);
  19. $className = $this->guessClassName($file, $config, $class);
  20. $classMetadata = new ClassMetadata($className);
  21. $classMetadata->fileResources[] = $file;
  22. $classMetadata->fileResources[] = $class->getFileName();
  23. foreach ($config[$className] as $field => $mappingData) {
  24. $fieldMetadata = [
  25. 'mapping' => $mappingData['mapping'],
  26. 'propertyName' => $field,
  27. 'fileNameProperty' => $mappingData['filename_property'] ?? null,
  28. 'size' => $mappingData['size'] ?? null,
  29. 'mimeType' => $mappingData['mime_type'] ?? null,
  30. 'originalName' => $mappingData['original_name'] ?? null,
  31. 'dimensions' => $mappingData['dimensions'] ?? null,
  32. ];
  33. $classMetadata->fields[$field] = $fieldMetadata;
  34. }
  35. return $classMetadata;
  36. }
  37. protected function loadMappingFile(string $file)
  38. {
  39. return YmlParser::parse(\file_get_contents($file));
  40. }
  41. /**
  42. * {@inheritdoc}
  43. */
  44. protected function getExtension(): string
  45. {
  46. return 'yml';
  47. }
  48. protected function guessClassName($file, array $config, \ReflectionClass $class = null)
  49. {
  50. if (null === $class) {
  51. return \current(\array_keys($config));
  52. }
  53. if (!isset($config[$class->name])) {
  54. throw new \RuntimeException(\sprintf('Expected metadata for class %s to be defined in %s.', $class->name, $file));
  55. }
  56. return $class->name;
  57. }
  58. }