I have code like in this example. But I want extend this. Now my code looks like this:
app.custom.chain:
class: AppBundle\Type\CustomChain
app.type.main:
class: AppBundle\Form\Type\MainType
autowire: true
tags:
- { name: app.custom.type, alias: main }
In MainType
I have __construct
method with argument:
public function __construct(ObjectManager $om)
{
$this->om = $om;
}
And in AppCustomTypePass
:
public function process(ContainerBuilder $container)
{
if (!$container->has('app.custom.chain')) {
return;
}
$definition = $container->findDefinition('app.custom.chain');
$taggedServices = $container->findTaggedServiceIds('app.custom.type');
foreach ($taggedServices as $id => $tags) {
foreach ($tags as $attributes) {
$definition->addMethodCall(
'addCustomType',
[
new Reference($id),
$attributes['alias'],
]
);
}
}
}
And I'm getting error:
Type error: Too few arguments to function AppBundle\Form\Type\MainType::__construct(), 0 passed
How I can pass arguments in this class in my AppCustomTypePass
class?
Here is an example of one of my services. It's a custom form but you can at least see how arguments are supposed to be passed:
app.form.contact:
class: AppBundle\Form\ContactType
arguments: ["@translator.default"]
tags:
- { name: form.type }
I dont know what the shortcut tag is supposed to be for the object manager, sorry but the one I passed in is the default translator for Symfony
In the compiler pass you can set the arguments for tagged services with:
foreach ($taggedServices as $id => $tags) {
foreach ($tags as $attributes) {
$tagDefinition = $container->findDefinition($id);
$tagDefinition->addArgument(***);
...
}
}