Skip to content

Commit 0a1f0ab

Browse files
committed
Resolver: added new special functions constant() and getProperty()
1 parent 6938188 commit 0a1f0ab

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/DI/PhpGenerator.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ public function formatStatement(Statement $statement): string
121121
case $entity === 'string':
122122
return $this->formatPhp('?::?(?, ?)', [Helpers::class, 'convertType', $arguments[0], $entity]);
123123

124+
case $entity === 'getProperty':
125+
return $arguments[0] instanceof Reference
126+
? $this->formatPhp('?->?', $arguments)
127+
: $this->formatPhp('?::$?', $arguments);
128+
129+
case $entity === 'constant':
130+
return implode('::', $arguments);
131+
124132
case is_string($entity): // create class
125133
return $arguments
126134
? $this->formatPhp("new $entity(...?:)", [$arguments])

src/DI/Resolver.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,22 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo
201201
}
202202
break;
203203

204+
case $entity === 'getProperty':
205+
if (count($arguments) !== 2) {
206+
throw new ServiceCreationException(sprintf('Function %s() expects 2 parameter, %s given.', $entity, count($arguments)));
207+
}
208+
209+
break;
210+
211+
case $entity === 'constant':
212+
if (count($arguments) !== 2) {
213+
throw new ServiceCreationException(sprintf('Function %s() expects 2 parameter, %s given.', $entity, count($arguments)));
214+
}
215+
216+
$arguments[0] = $this->resolveReferenceType($arguments[0]);
217+
break;
218+
219+
204220
case is_string($entity): // create class
205221
if (!class_exists($entity)) {
206222
throw new ServiceCreationException(sprintf("Class '%s' not found.", $entity));
@@ -460,9 +476,9 @@ private function convertReferences(array $arguments): array
460476
if (!isset($pair[1])) { // @service
461477
$val = new Reference($pair[0]);
462478
} elseif (preg_match('#^[A-Z][a-zA-Z0-9_]*$#D', $pair[1])) { // @service::CONSTANT
463-
$val = ContainerBuilder::literal($this->resolveReferenceType(new Reference($pair[0])) . '::' . $pair[1]);
479+
$val = new Statement('constant', [new Reference($pair[0]), $pair[1]]);
464480
} else { // @service::property
465-
$val = new Statement([new Reference($pair[0]), '$' . $pair[1]]);
481+
$val = new Statement('getProperty', [new Reference($pair[0]), $pair[1]]);
466482
}
467483
} elseif (is_string($val) && str_starts_with($val, '@@')) { // escaped text @@
468484
$val = substr($val, 1);

0 commit comments

Comments
 (0)