vendor/vich/uploader-bundle/src/Metadata/Driver/AbstractYamlDriver.php line 52

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. abstract class AbstractYamlDriver extends AbstractFileDriver
  12. {
  13. /**
  14. * @param string $file
  15. */
  16. protected function loadMetadataFromFile(\ReflectionClass $class, $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. /**
  38. * @return mixed
  39. */
  40. protected function loadMappingFile(string $file)
  41. {
  42. return YmlParser::parse(\file_get_contents($file));
  43. }
  44. protected function guessClassName(string $file, array $config, \ReflectionClass $class = null): string
  45. {
  46. if (null === $class) {
  47. return \current(\array_keys($config));
  48. }
  49. if (!isset($config[$class->name])) {
  50. throw new \RuntimeException(\sprintf('Expected metadata for class %s to be defined in %s.', $class->name, $file));
  51. }
  52. return $class->name;
  53. }
  54. }