function AutowireRequiredPropertiesPass::processValue
Overrides AbstractRecursivePass::processValue
File
-
vendor/
symfony/ dependency-injection/ Compiler/ AutowireRequiredPropertiesPass.php, line 29
Class
- AutowireRequiredPropertiesPass
- Looks for definitions with autowiring enabled and registers their corresponding "#[Required]" properties.
Namespace
Symfony\Component\DependencyInjection\CompilerCode
protected function processValue(mixed $value, bool $isRoot = false) : mixed {
$value = parent::processValue($value, $isRoot);
if (!$value instanceof Definition || !$value->isAutowired() || $value->isAbstract() || !$value->getClass()) {
return $value;
}
if (!($reflectionClass = $this->container
->getReflectionClass($value->getClass(), false))) {
return $value;
}
$properties = $value->getProperties();
foreach ($reflectionClass->getProperties() as $reflectionProperty) {
if (!($type = $reflectionProperty->getType()) instanceof \ReflectionNamedType) {
continue;
}
if (!$reflectionProperty->getAttributes(Required::class)) {
continue;
}
if (\array_key_exists($name = $reflectionProperty->getName(), $properties)) {
continue;
}
$type = $type->getName();
$value->setProperty($name, new TypedReference($type, $type, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $name));
}
return $value;
}