-
-
Notifications
You must be signed in to change notification settings - Fork 9.7k
Closed
Description
For context: #42450
Basically DI extensions and the kernel use a separeate file loader instance.
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.xml');
should look familiar to many of us :) constructing the new PhpFileLoader is more painful.
However, the kernel, uses a powerful delegating one:
symfony/src/Symfony/Component/HttpKernel/Kernel.php
Lines 757 to 772 in 76a414c
protected function getContainerLoader(ContainerInterface $container) | |
{ | |
$env = $this->getEnvironment(); | |
$locator = new FileLocator($this); | |
$resolver = new LoaderResolver([ | |
new XmlFileLoader($container, $locator, $env), | |
new YamlFileLoader($container, $locator, $env), | |
new IniFileLoader($container, $locator, $env), | |
new PhpFileLoader($container, $locator, $env, class_exists(ConfigBuilderGenerator::class) ? new ConfigBuilderGenerator($this->getBuildDir()) : null), | |
new GlobFileLoader($container, $locator, $env), | |
new DirectoryLoader($container, $locator, $env), | |
new ClosureLoader($container, $env), | |
]); | |
return new DelegatingLoader($resolver); | |
} |
What about leveraging it in extensions? Could we? Eg. receive it as argument, $loader->load(__DIR__.'/../Resources/config/services.xml');
, and done :)
Maybe a ScopedLoader to provide a basepath for decoration? Or out-of-the-box bundle paths like @My/Resources/config/services.xml
. But i actually tend to prefer explicit absolute paths (local PHP vars/runtime FTW).
WDYT?
sstokchapterjason