From 7befd1d4d0475bf80da4f97491504a58084f8373 Mon Sep 17 00:00:00 2001 From: Michael Babker Date: Tue, 27 Jun 2023 10:51:00 -0400 Subject: [PATCH] Only add the YamlDriver to the chain when symfony/yaml is installed --- src/Builder/DefaultDriverFactory.php | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Builder/DefaultDriverFactory.php b/src/Builder/DefaultDriverFactory.php index 5b53daf68..041ca4a71 100644 --- a/src/Builder/DefaultDriverFactory.php +++ b/src/Builder/DefaultDriverFactory.php @@ -19,6 +19,7 @@ use Metadata\Driver\DriverChain; use Metadata\Driver\DriverInterface; use Metadata\Driver\FileLocator; +use Symfony\Component\Yaml\Yaml; final class DefaultDriverFactory implements DriverFactoryInterface { @@ -56,19 +57,27 @@ public function enableEnumSupport(bool $enableEnumSupport = true): void public function createDriver(array $metadataDirs, Reader $annotationReader): DriverInterface { - $driver = new DriverChain([ - new AnnotationOrAttributeDriver($this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator, $annotationReader), - ]); + /* + * Build the sorted list of metadata drivers based on the environment. The final order should be: + * + * - YAML Driver + * - XML Driver + * - Annotations/Attributes Driver + * - Null (Fallback) Driver + */ + $metadataDrivers = [new AnnotationOrAttributeDriver($this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator, $annotationReader)]; if (!empty($metadataDirs)) { $fileLocator = new FileLocator($metadataDirs); - $driver = new DriverChain([ - new YamlDriver($fileLocator, $this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator), - new XmlDriver($fileLocator, $this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator), - $driver, - ]); + + array_unshift($metadataDrivers, new XmlDriver($fileLocator, $this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator)); + + if (class_exists(Yaml::class)) { + array_unshift($metadataDrivers, new YamlDriver($fileLocator, $this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator)); + } } + $driver = new DriverChain($metadataDrivers); $driver->addDriver(new NullDriver($this->propertyNamingStrategy)); if ($this->enableEnumSupport) {