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. protected function loadMetadataFromFile(\ReflectionClass $class, string $file): ?JMSClassMetadata
  14. {
  15. $elem = XmlUtils::loadFile($file);
  16. $elem = \simplexml_import_dom($elem);
  17. $className = $this->guessClassName($file, $elem, $class);
  18. $classMetadata = new ClassMetadata($className);
  19. $classMetadata->fileResources[] = $file;
  20. $classMetadata->fileResources[] = $class->getFileName();
  21. foreach ($elem->children() as $field) {
  22. $fieldMetadata = [
  23. 'mapping' => (string) $field->attributes()->mapping,
  24. 'propertyName' => (string) $field->attributes()->name,
  25. 'fileNameProperty' => (string) $field->attributes()->filename_property,
  26. 'size' => (string) $field->attributes()->size,
  27. 'mimeType' => (string) $field->attributes()->mime_type,
  28. 'originalName' => (string) $field->attributes()->original_name,
  29. 'dimensions' => null === $field->attributes()->dimensions ? null : (string) $field->attributes()->dimensions,
  30. ];
  31. $classMetadata->fields[(string) $field->attributes()->name] = $fieldMetadata;
  32. }
  33. return $classMetadata;
  34. }
  35. /**
  36. * {@inheritdoc}
  37. */
  38. protected function getExtension(): string
  39. {
  40. return 'xml';
  41. }
  42. protected function guessClassName($file, \SimpleXMLElement $elem, \ReflectionClass $class = null)
  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. }