[DI][Routing] add wither to configure the path of PHP-DSL configurators

This commit is contained in:
Nicolas Grekas 2020-01-24 14:02:49 +01:00
parent 07818f2747
commit 8f92c85689
6 changed files with 30 additions and 13 deletions

View File

@ -124,7 +124,6 @@ trait MicroKernelTrait
} }
// the user has opted into using the ContainerConfigurator // the user has opted into using the ContainerConfigurator
$defaultDefinition = (new Definition())->setAutowired(true)->setAutoconfigured(true);
/* @var ContainerPhpFileLoader $kernelLoader */ /* @var ContainerPhpFileLoader $kernelLoader */
$kernelLoader = $loader->getResolver()->resolve($file); $kernelLoader = $loader->getResolver()->resolve($file);
$kernelLoader->setCurrentDir(\dirname($file)); $kernelLoader->setCurrentDir(\dirname($file));
@ -136,7 +135,7 @@ trait MicroKernelTrait
}; };
try { try {
$this->configureContainer(new ContainerConfigurator($container, $kernelLoader, $instanceof, $file, $file, $defaultDefinition), $loader); $this->configureContainer(new ContainerConfigurator($container, $kernelLoader, $instanceof, $file, $file), $loader);
} finally { } finally {
$instanceof = []; $instanceof = [];
$kernelLoader->registerAliasesForSinglyImplementedInterfaces(); $kernelLoader->registerAliasesForSinglyImplementedInterfaces();

View File

@ -79,6 +79,7 @@ class FlexStyleMicroKernel extends Kernel
$c->services() $c->services()
->set('logger', NullLogger::class) ->set('logger', NullLogger::class)
->set('stdClass', 'stdClass') ->set('stdClass', 'stdClass')
->autowire()
->factory([$this, 'createHalloween']) ->factory([$this, 'createHalloween'])
->arg('$halloween', '%halloween%'); ->arg('$halloween', '%halloween%');

View File

@ -27,7 +27,7 @@
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/filesystem": "^4.4|^5.0", "symfony/filesystem": "^4.4|^5.0",
"symfony/finder": "^4.4|^5.0", "symfony/finder": "^4.4|^5.0",
"symfony/routing": "^5.0" "symfony/routing": "^5.1"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "~1.7", "doctrine/annotations": "~1.7",

View File

@ -34,16 +34,14 @@ class ContainerConfigurator extends AbstractConfigurator
private $path; private $path;
private $file; private $file;
private $anonymousCount = 0; private $anonymousCount = 0;
private $defaultDefinition;
public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path, string $file, Definition $defaultDefinition = null) public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path, string $file)
{ {
$this->container = $container; $this->container = $container;
$this->loader = $loader; $this->loader = $loader;
$this->instanceof = &$instanceof; $this->instanceof = &$instanceof;
$this->path = $path; $this->path = $path;
$this->file = $file; $this->file = $file;
$this->defaultDefinition = $defaultDefinition;
} }
final public function extension(string $namespace, array $config) final public function extension(string $namespace, array $config)
@ -69,7 +67,18 @@ class ContainerConfigurator extends AbstractConfigurator
final public function services(): ServicesConfigurator final public function services(): ServicesConfigurator
{ {
return new ServicesConfigurator($this->container, $this->loader, $this->instanceof, $this->path, $this->anonymousCount, $this->defaultDefinition); return new ServicesConfigurator($this->container, $this->loader, $this->instanceof, $this->path, $this->anonymousCount);
}
/**
* @return static
*/
final public function withPath(string $path): self
{
$clone = clone $this;
$clone->path = $clone->file = $path;
return $clone;
} }
} }

View File

@ -32,19 +32,16 @@ class ServicesConfigurator extends AbstractConfigurator
private $path; private $path;
private $anonymousHash; private $anonymousHash;
private $anonymousCount; private $anonymousCount;
private $defaultDefinition;
public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path = null, int &$anonymousCount = 0, Definition $defaultDefinition = null) public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path = null, int &$anonymousCount = 0)
{ {
$defaultDefinition = $defaultDefinition ?? new Definition(); $this->defaults = new Definition();
$this->defaults = clone $defaultDefinition;
$this->container = $container; $this->container = $container;
$this->loader = $loader; $this->loader = $loader;
$this->instanceof = &$instanceof; $this->instanceof = &$instanceof;
$this->path = $path; $this->path = $path;
$this->anonymousHash = ContainerBuilder::hash($path ?: mt_rand()); $this->anonymousHash = ContainerBuilder::hash($path ?: mt_rand());
$this->anonymousCount = &$anonymousCount; $this->anonymousCount = &$anonymousCount;
$this->defaultDefinition = $defaultDefinition;
$instanceof = []; $instanceof = [];
} }
@ -53,7 +50,7 @@ class ServicesConfigurator extends AbstractConfigurator
*/ */
final public function defaults(): DefaultsConfigurator final public function defaults(): DefaultsConfigurator
{ {
return new DefaultsConfigurator($this, $this->defaults = clone $this->defaultDefinition, $this->path); return new DefaultsConfigurator($this, $this->defaults = new Definition(), $this->path);
} }
/** /**

View File

@ -57,4 +57,15 @@ class RoutingConfigurator
{ {
return new CollectionConfigurator($this->collection, $name); return new CollectionConfigurator($this->collection, $name);
} }
/**
* @return static
*/
final public function withPath(string $path): self
{
$clone = clone $this;
$clone->path = $clone->file = $path;
return $clone;
}
} }