I have several services: DieselCaseService, CarloanCaseService LvCaseService.
The controller decides which of services to get.
$type = $quickCheck[\
For any "multiple instances of same type by key" situation, you can use autowired array.
App\
namespaceservices:
_defaults:
autowire: true
App\:
resource: ../src
cases[$case->getName()] = $cases;
}
}
public function someAction(): void
{
$dieselCase = $this->cases['diesel']; // @todo maybe add validation for exisiting key
$dieselCase->anyMethod();
}
}
The autowired array functionality is not in Symfony core. It's possible thanks to compiler passes. You can write your own or use this one:
use Symplify\PackageBuilder\DependencyInjection\CompilerPass\AutowireArrayParameterCompilerPass;
final class AppKernel extends Kernel
{
protected function build(ContainerBuilder $containerBuilder): void
{
$containerBuilder->addCompilerPass(new AutowireArrayParameterCompilerPass);
}
}
That's it! :)
I use it on all my projects and it works like a charm.
Read more in post about autowired arrays I wrote.