From a432417ab9f901c7915e01d04d16904c4479155f Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 24 Aug 2010 16:36:29 +0200 Subject: [PATCH] [DependencyInjection] added a way to ignore errors when importing a non-existent file (useful when you want to include an optional service file) --- .../DependencyInjection/Loader/FileLoader.php | 18 ++++++++++++------ .../Loader/XmlFileLoader.php | 2 +- .../Loader/YamlFileLoader.php | 2 +- .../schema/dic/services/services-1.0.xsd | 8 +------- .../Fixtures/xml/services4.xml | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php index a7a1ac070e..da3dd9b6ac 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php +++ b/src/Symfony/Component/DependencyInjection/Loader/FileLoader.php @@ -45,15 +45,21 @@ abstract class FileLoader extends Loader * * @param mixed $resource A Resource */ - public function import($resource) + public function import($resource, $ignoreErrors = false) { - $loader = $this->resolve($resource); + try { + $loader = $this->resolve($resource); - if ($loader instanceof FileLoader && null !== $this->currentDir) { - $resource = $this->getAbsolutePath($resource, $this->currentDir); + if ($loader instanceof FileLoader && null !== $this->currentDir) { + $resource = $this->getAbsolutePath($resource, $this->currentDir); + } + + $loader->load($resource); + } catch (\Exception $e) { + if (!$ignoreErrors) { + throw $e; + } } - - $loader->load($resource); } /** diff --git a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php index 5c7ddc4f38..9bbf0cf435 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php +++ b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php @@ -82,7 +82,7 @@ class XmlFileLoader extends FileLoader foreach ($xml->imports->import as $import) { $this->currentDir = dirname($file); - $this->import((string) $import['resource']); + $this->import((string) $import['resource'], (Boolean) $import->getAttributeAsPhp('ignore-errors')); } } diff --git a/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php index e94fb1b830..7132f4dfc5 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php +++ b/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php @@ -81,7 +81,7 @@ class YamlFileLoader extends FileLoader foreach ($content['imports'] as $import) { $this->currentDir = dirname($file); - $this->import($import['resource']); + $this->import($import['resource'], isset($import['ignore_errors']) ? (Boolean) $import['ignore_errors'] : false); } } diff --git a/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd b/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd index c1fcf6c611..2a9d3f690b 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd +++ b/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd @@ -61,13 +61,7 @@ ]]> - - - - - + diff --git a/tests/Symfony/Tests/Component/DependencyInjection/Fixtures/xml/services4.xml b/tests/Symfony/Tests/Component/DependencyInjection/Fixtures/xml/services4.xml index de88efc6c3..9ebf6d7aaf 100644 --- a/tests/Symfony/Tests/Component/DependencyInjection/Fixtures/xml/services4.xml +++ b/tests/Symfony/Tests/Component/DependencyInjection/Fixtures/xml/services4.xml @@ -6,7 +6,7 @@ - +