vendor/jms/metadata/src/Driver/DriverChain.php line 57

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Metadata\Driver;
  4. use Metadata\ClassMetadata;
  5. final class DriverChain implements AdvancedDriverInterface
  6. {
  7. /**
  8. * @var DriverInterface[]
  9. */
  10. private $drivers;
  11. /**
  12. * @param DriverInterface[] $drivers
  13. */
  14. public function __construct(array $drivers = [])
  15. {
  16. $this->drivers = $drivers;
  17. }
  18. public function addDriver(DriverInterface $driver): void
  19. {
  20. $this->drivers[] = $driver;
  21. }
  22. public function loadMetadataForClass(\ReflectionClass $class): ?ClassMetadata
  23. {
  24. foreach ($this->drivers as $driver) {
  25. if (null !== $metadata = $driver->loadMetadataForClass($class)) {
  26. return $metadata;
  27. }
  28. }
  29. return null;
  30. }
  31. /**
  32. * {@inheritDoc}
  33. */
  34. public function getAllClassNames(): array
  35. {
  36. $classes = [];
  37. foreach ($this->drivers as $driver) {
  38. if (!$driver instanceof AdvancedDriverInterface) {
  39. throw new \RuntimeException(
  40. sprintf(
  41. 'Driver "%s" must be an instance of "AdvancedDriverInterface" to use ' .
  42. '"DriverChain::getAllClassNames()".',
  43. get_class($driver)
  44. )
  45. );
  46. }
  47. $driverClasses = $driver->getAllClassNames();
  48. if (!empty($driverClasses)) {
  49. $classes = array_merge($classes, $driverClasses);
  50. }
  51. }
  52. return $classes;
  53. }
  54. }