Skip to content

[FrameworkBundle][DI] One size fits all file loader? #42647

Closed
@ro0NL

Description

@ro0NL

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:

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?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions