Skip to content

Commit f185732

Browse files
Fulfil services
1 parent 4a0fb6f commit f185732

File tree

5 files changed

+150
-21
lines changed

5 files changed

+150
-21
lines changed

src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public function buildConfigClassAndTraits(array $configurations): \Closure
107107
foreach ($configurationKeys as $configurationKey) {
108108
$camelCaseKey = $this->camelCase($configurationKey);
109109

110-
$class->addProperty(sprintf('%sConfig', $camelCaseKey), sprintf('%sConfig', ucfirst($camelCaseKey)));
110+
$class->addProperty(\sprintf('%sConfig', $camelCaseKey), \sprintf('%sConfig', ucfirst($camelCaseKey)));
111111
}
112112

113113
$class->addMethod('__construct', <<<'PHP'
@@ -117,8 +117,8 @@ public function __construct(public readonly ?string $env)
117117
$this->builders = [BUILDERS];
118118
}
119119
PHP, [
120-
'BUILDERS' => implode(", ", array_map(fn ($alias) => sprintf('$this->%sConfig', $this->camelCase($alias)), $configurationKeys)),
121-
'CONFIGS' => implode("\n", array_map(fn ($alias) => sprintf(' $this->%sConfig = new %sConfig();', $this->camelCase($alias), ucfirst($this->camelCase($alias))), $configurationKeys)),
120+
'BUILDERS' => implode(', ', array_map(fn ($alias) => \sprintf('$this->%sConfig', $this->camelCase($alias)), $configurationKeys)),
121+
'CONFIGS' => implode("\n", array_map(fn ($alias) => \sprintf(' $this->%sConfig = new %sConfig();', $this->camelCase($alias), ucfirst($this->camelCase($alias))), $configurationKeys)),
122122
]);
123123

124124
$class->addMethod('getBuilders', <<<'PHP'
@@ -133,6 +133,7 @@ public function getBuilders(): array
133133

134134
return function () use ($path, $traitsClosure) {
135135
$traitsClosure();
136+
136137
return require_once $path;
137138
};
138139
}

src/Symfony/Component/Config/Builder/ConfigTraitsGenerator.php

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,16 @@ public function build(array $configurations): \Closure
3838

3939
$class = new TraitBuilder('Symfony\Config', $alias);
4040
$class->addMethod($alias, <<<'PHP'
41-
/**
42-
* @param COMMENT $config
43-
*/
44-
public function NAME(array $config): static
45-
{
46-
$this->NAMEConfig->configure($config);
41+
/**
42+
* @param COMMENT $config
43+
*/
44+
public function NAME(array $config): static
45+
{
46+
$this->NAMEConfig->configure($config);
4747
48-
return $this;
49-
}
50-
PHP, [
48+
return $this;
49+
}
50+
PHP, [
5151
'COMMENT' => ArrayShapeGenerator::generate($configuration->getConfigTreeBuilder()->buildTree()),
5252
'NAME' => $alias,
5353
]);
@@ -67,11 +67,11 @@ public function NAME(array $config): static
6767

6868
private function getFullPath(ClassBuilder|TraitBuilder $class): string
6969
{
70-
$directory = $this->outputDir . \DIRECTORY_SEPARATOR . $class->getDirectory();
70+
$directory = $this->outputDir.\DIRECTORY_SEPARATOR.$class->getDirectory();
7171
if (!is_dir($directory)) {
72-
@mkdir($directory, 0777, true);
72+
@mkdir($directory, 0o777, true);
7373
}
7474

75-
return $directory . \DIRECTORY_SEPARATOR . $class->getFilename();
75+
return $directory.\DIRECTORY_SEPARATOR.$class->getFilename();
7676
}
7777
}

src/Symfony/Component/DependencyInjection/Loader/PhpFileLoader.php

Lines changed: 107 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,114 @@ private function processConfigClass(Config $config, ContainerConfigurator $conta
228228

229229
$servicesConfigurator = $containerConfigurator->services();
230230
foreach ($config->getServices() as $id => $class) {
231-
if (\is_array($class)) {
232-
$servicesConfigurator->set($class['id'], $class['class'] ?? null);
233-
} else {
231+
if (!\is_array($class)) {
234232
$servicesConfigurator->set($id, $class);
233+
234+
continue;
235+
}
236+
237+
$serviceConfigurator = $servicesConfigurator->set($class['id'], $class['class'] ?? null);
238+
239+
if (isset($class['alias'])) {
240+
$servicesConfigurator->alias($class['id'], $class['alias']);
241+
242+
// nothing else to do with aliases
243+
continue;
244+
}
245+
246+
if (isset($class['parent'])) {
247+
$serviceConfigurator->parent($class['parent']);
248+
}
249+
250+
if (isset($class['shared'])) {
251+
$serviceConfigurator->share($class['shared']);
252+
}
253+
254+
if (isset($class['synthetic'])) {
255+
$serviceConfigurator->synthetic($class['synthetic']);
256+
}
257+
258+
if (isset($class['lazy'])) {
259+
$serviceConfigurator->lazy($class['lazy']);
260+
}
261+
262+
if (null !== $public = $class['public'] ?? null) {
263+
$serviceConfigurator->{$public ? 'public' : 'private'}();
264+
}
265+
266+
if (isset($class['abstract'])) {
267+
$serviceConfigurator->abstract($class['abstract']);
268+
}
269+
270+
if (isset($class['deprecated'])) {
271+
if (\is_array($class['deprecated'])) {
272+
$serviceConfigurator->deprecate($class['deprecated']['package'], $class['deprecated']['version'], $class['deprecated']['message'] ?? '');
273+
} else {
274+
$serviceConfigurator->deprecate('', '', $class['deprecated']);
275+
}
276+
}
277+
278+
if (isset($class['factory'])) {
279+
$serviceConfigurator->factory($class['factory']);
280+
}
281+
282+
if (isset($class['constructor'])) {
283+
$serviceConfigurator->constructor($class['constructor']);
284+
}
285+
286+
if (isset($class['file'])) {
287+
$serviceConfigurator->file($class['file']);
288+
}
289+
290+
if (isset($class['arguments'])) {
291+
$serviceConfigurator->args($class['arguments']);
292+
}
293+
294+
foreach ($class['properties'] ?? [] as $property => $value) {
295+
$serviceConfigurator->property($property, $value);
296+
}
297+
298+
if (isset($class['configurator'])) {
299+
$serviceConfigurator->configurator($class['configurator']);
300+
}
301+
302+
foreach ($class['calls'] ?? [] as $call) {
303+
if (isset($call['method'])) {
304+
$serviceConfigurator->call($call['method'], $call['arguments'] ?? [], $call['returns_clone'] ?? false);
305+
} elseif (isset($call[0])) {
306+
$serviceConfigurator->call($call[0], $call[1] ?? [], $call[2] ?? false);
307+
}
308+
}
309+
310+
foreach ($class['tags'] ?? [] as $tag) {
311+
if (\is_array($tag)) {
312+
$name = $tag['name'];
313+
unset($tag['name']);
314+
$serviceConfigurator->tag($name, $tag);
315+
} else {
316+
$serviceConfigurator->tag($tag);
317+
}
318+
}
319+
320+
if (isset($class['decorates'])) {
321+
$serviceConfigurator->decorate(
322+
$class['decorates'],
323+
$class['decoration_inner_name'] ?? null,
324+
$class['decoration_priority'] ?? 0,
325+
$class['decoration_on_invalid'] ?? 'exception'
326+
);
327+
}
328+
329+
if (isset($class['autowire'])) {
330+
$serviceConfigurator->autowire($class['autowire']);
331+
}
332+
333+
if (isset($class['autoconfigure'])) {
334+
$serviceConfigurator->autoconfigure($class['autoconfigure']);
335+
}
336+
337+
foreach ($class['bind'] ?? [] as $argument => $value) {
338+
$serviceConfigurator->bind($argument, $value);
235339
}
236340
}
237341
}

src/Symfony/Component/DependencyInjection/Resource/ParametersTrait.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ trait ParametersTrait
1616
private array $parameters = [];
1717

1818
/**
19-
* @var array<string, array|bool|string|int|float|\UnitEnum|null> $parameters
19+
* @param array<string, array|bool|string|int|float|\UnitEnum|null> $parameters
2020
*/
21-
function parameters(array $parameters): static
21+
public function parameters(array $parameters): static
2222
{
2323
$this->parameters = $parameters;
2424

src/Symfony/Component/DependencyInjection/Resource/ServicesTrait.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,31 @@ trait ServicesTrait
1818
/**
1919
* @var array<array{
2020
* id: string,
21-
* class?: string|int|float|bool,
21+
* class?: string,
22+
* alias?: string,
23+
* parent?: string,
24+
* shared?: bool,
25+
* synthetic?: bool,
26+
* lazy?: bool|string,
27+
* public?: bool,
28+
* abstract?: bool,
29+
* deprecated?: string|array{package: string, version: string, message?: string},
30+
* factory?: string|array{0: string|null, 1: string},
31+
* constructor?: string,
32+
* file?: string,
33+
* arguments?: array,
34+
* properties?: array<string, mixed>,
35+
* configurator?: string|array{0: string|null, 1: string},
36+
* calls?: array<array{0: string, 1?: array, 2?: bool}|array{method: string, arguments?: array, returns_clone?: bool}>,
37+
* tags?: array<array{name: string, ...}|string>,
38+
* resource_tags?: array<array{name: string, ...}|string>,
39+
* decorates?: string,
40+
* decoration_inner_name?: string|null,
41+
* decoration_priority?: int,
42+
* decoration_on_invalid?: "exception"|"ignore"|null,
43+
* autowire?: bool,
44+
* autoconfigure?: bool,
45+
* bind?: array<string, mixed>,
2246
* }>|array<string, class-string|null> $services
2347
*/
2448
public function services(array $services): static

0 commit comments

Comments
 (0)