Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
feature #35514 [DI][Routing] add wither to configure the path of PHP-…
…DSL configurators (nicolas-grekas)

This PR was merged into the 5.1-dev branch.

Discussion
----------

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

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

This makes PHP-DSL configurators more flexible, by allowing to use them for a different path than they were initially created for.

Sidekick of symfony/recipes#721

Commits
-------

8f92c85 [DI][Routing] add wither to configure the path of PHP-DSL configurators
  • Loading branch information
fabpot committed Jan 30, 2020
2 parents a916c61 + 8f92c85 commit ee9aacd
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 13 deletions.
Expand Up @@ -124,7 +124,6 @@ public function registerContainerConfiguration(LoaderInterface $loader)
}

// the user has opted into using the ContainerConfigurator
$defaultDefinition = (new Definition())->setAutowired(true)->setAutoconfigured(true);
/* @var ContainerPhpFileLoader $kernelLoader */
$kernelLoader = $loader->getResolver()->resolve($file);
$kernelLoader->setCurrentDir(\dirname($file));
Expand All @@ -136,7 +135,7 @@ public function registerContainerConfiguration(LoaderInterface $loader)
};

try {
$this->configureContainer(new ContainerConfigurator($container, $kernelLoader, $instanceof, $file, $file, $defaultDefinition), $loader);
$this->configureContainer(new ContainerConfigurator($container, $kernelLoader, $instanceof, $file, $file), $loader);
} finally {
$instanceof = [];
$kernelLoader->registerAliasesForSinglyImplementedInterfaces();
Expand Down
Expand Up @@ -79,6 +79,7 @@ protected function configureContainer(ContainerConfigurator $c)
$c->services()
->set('logger', NullLogger::class)
->set('stdClass', 'stdClass')
->autowire()
->factory([$this, 'createHalloween'])
->arg('$halloween', '%halloween%');

Expand Down
2 changes: 1 addition & 1 deletion src/Symfony/Bundle/FrameworkBundle/composer.json
Expand Up @@ -27,7 +27,7 @@
"symfony/polyfill-mbstring": "~1.0",
"symfony/filesystem": "^4.4|^5.0",
"symfony/finder": "^4.4|^5.0",
"symfony/routing": "^5.0"
"symfony/routing": "^5.1"
},
"require-dev": {
"doctrine/annotations": "~1.7",
Expand Down
Expand Up @@ -34,16 +34,14 @@ class ContainerConfigurator extends AbstractConfigurator
private $path;
private $file;
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->loader = $loader;
$this->instanceof = &$instanceof;
$this->path = $path;
$this->file = $file;
$this->defaultDefinition = $defaultDefinition;
}

final public function extension(string $namespace, array $config)
Expand All @@ -69,7 +67,18 @@ final public function parameters(): ParametersConfigurator

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;
}
}

Expand Down
Expand Up @@ -32,19 +32,16 @@ class ServicesConfigurator extends AbstractConfigurator
private $path;
private $anonymousHash;
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 = clone $defaultDefinition;
$this->defaults = new Definition();
$this->container = $container;
$this->loader = $loader;
$this->instanceof = &$instanceof;
$this->path = $path;
$this->anonymousHash = ContainerBuilder::hash($path ?: mt_rand());
$this->anonymousCount = &$anonymousCount;
$this->defaultDefinition = $defaultDefinition;
$instanceof = [];
}

Expand All @@ -53,7 +50,7 @@ public function __construct(ContainerBuilder $container, PhpFileLoader $loader,
*/
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);
}

/**
Expand Down
Expand Up @@ -57,4 +57,15 @@ final public function collection(string $name = ''): CollectionConfigurator
{
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;
}
}

0 comments on commit ee9aacd

Please sign in to comment.