我有像example这样的代码。但我想扩展这一点。 现在我的代码看起来像这样:
app.custom.chain:
class: AppBundle\Type\CustomChain
app.type.main:
class: AppBundle\Form\Type\MainType
autowire: true
tags:
- { name: app.custom.type, alias: main }
在MainType
我有__construct
方法带参数:
public function __construct(ObjectManager $om)
{
$this->om = $om;
}
在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'],
]
);
}
}
}
我收到错误:
类型错误:函数AppBundle \ Form \ Type \ MainType :: __ construct()的参数太少,0传递
我如何在AppCustomTypePass
类中传递此类中的参数?
答案 0 :(得分:0)
在编译器传递中,您可以使用以下命令设置标记服务的参数:
foreach ($taggedServices as $id => $tags) {
foreach ($tags as $attributes) {
$tagDefinition = $container->findDefinition($id);
$tagDefinition->addArgument(***);
...
}
}
答案 1 :(得分:0)
以下是我的一项服务示例。这是一个自定义表单,但你至少可以看到如何传递参数:
app.form.contact:
class: AppBundle\Form\ContactType
arguments: ["@translator.default"]
tags:
- { name: form.type }
我不知道对象管理器的快捷方式标签是什么,抱歉,但我传入的是Symfony的默认翻译器