将服务添加到自定义标签链symfony

时间:2017-03-06 09:37:49

标签: php symfony

我有像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类中传递此类中的参数?

2 个答案:

答案 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的默认翻译器