vendor/vich/uploader-bundle/src/Metadata/Driver/XmlDriver.php line 51

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\Config\Util\XmlUtils;
  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 XmlDriver extends AbstractFileDriver
  12. {
  13. /**
  14. * @param string $file
  15. */
  16. protected function loadMetadataFromFile(\ReflectionClass $class, $file): ?JMSClassMetadata
  17. {
  18. $elem = XmlUtils::loadFile($file);
  19. $elem = \simplexml_import_dom($elem);
  20. $className = $this->guessClassName($file, $elem, $class);
  21. $classMetadata = new ClassMetadata($className);
  22. $classMetadata->fileResources[] = $file;
  23. $classMetadata->fileResources[] = $class->getFileName();
  24. foreach ($elem->children() as $field) {
  25. $fieldMetadata = [
  26. 'mapping' => (string) $field->attributes()->mapping,
  27. 'propertyName' => (string) $field->attributes()->name,
  28. 'fileNameProperty' => (string) $field->attributes()->filename_property,
  29. 'size' => (string) $field->attributes()->size,
  30. 'mimeType' => (string) $field->attributes()->mime_type,
  31. 'originalName' => (string) $field->attributes()->original_name,
  32. 'dimensions' => null === $field->attributes()->dimensions ? null : (string) $field->attributes()->dimensions,
  33. ];
  34. $classMetadata->fields[(string) $field->attributes()->name] = $fieldMetadata;
  35. }
  36. return $classMetadata;
  37. }
  38. protected function getExtension(): string
  39. {
  40. return 'xml';
  41. }
  42. protected function guessClassName(string $file, \SimpleXMLElement $elem, \ReflectionClass $class = null): string
  43. {
  44. if (null === $class) {
  45. return (string) $elem->attributes()->class;
  46. }
  47. if ($class->name !== (string) $elem->attributes()->class) {
  48. throw new \RuntimeException(\sprintf('Expected metadata for class %s to be defined in %s.', $class->name, $file));
  49. }
  50. return $class->name;
  51. }
  52. }