Closed
Description
Symfony version(s) affected
5.4.23
Description
Although Symfony 5.4 allows set an enum as an argument in DI Definition, it is not possible set the enum as the argument in Configurator.
Works:
protected function build(ContainerBuilder $container)
{
$container->register(MyService::class)
->setPublic(true)
->setArgument('$myEnum', MyEnum::First)
;
}
Not works:
return static function (ContainerConfigurator $configurator): void {
$configurator->services()->set(MyService::class)
->public()
->arg('$myEnum', MyEnum::First)
;
};
Throws: Cannot use values of type "App\Service\MyEnum" in service configuration files.
How to reproduce
config/services.php
$configurator->services()->set(MyService::class)
->arg('$myEnum', MyEnum::First)
;
src/Service/MyEnum.php
<?php
namespace App\Service;
enum MyEnum: string
{
case First = 'first';
case Second = 'second';
}
src/Service/MyService.php
<?php
namespace App\Service;
class MyService
{
public function __construct(MyEnum $myEnum)
{
}
}
Possible Solution
Symfony\Component\DependencyInjection\Loader\Configurator\AbstractConfigurator::processValue
Line 102
Replace
case null === $value:
case \is_scalar($value):
return $value;
by
case null === $value:
case \is_scalar($value):
case $value instanceof \UnitEnum:
return $value;
Additional Context
No response