2017-03-06 5 views
0

私はこのexampleのようなコードを持っています。しかし、私はこれを拡張したい。 今、私のコードは次のようになります。カスタムタグにサービスを追加するチェーンsymfony

public function __construct(ObjectManager $om) 
{ 
    $this->om = $om; 
} 

そしてAppCustomTypePass中:MainType

app.custom.chain: 
    class: AppBundle\Type\CustomChain 

app.type.main: 
    class: AppBundle\Form\Type\MainType 
    autowire: true 
    tags: 
     - { name: app.custom.type, alias: main } 

私は引数を持つ__construct方法持って

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'], 
       ] 
      ); 

     } 
    } 
} 

をそして私はエラーを取得しています:

Type error: Too few arguments to function AppBundle\Form\Type\MainType::__construct(), 0 passed

AppCustomTypePassクラスのこのクラスで引数を渡す方法はありますか?あなたがでタグ付けされたサービスのための引数を設定することができますコンパイラパスで

+0

何をしようとしていますか?なぜサービス定義で 'MainType'引数を単純に定義したくないのですか? –

+0

@JakubMatczakカスタムサービスタグを使用する必要がある –

答えて

0

は私のサービスの一つの例です。これは、カスタムフォームですが、あなたは、少なくとも引数を渡すことになっているかを確認することができます

app.form.contact: 
    class: AppBundle\Form\ContactType 
    arguments: ["@translator.default"] 
    tags: 
     - { name: form.type } 

私は申し訳ありませんが、ショートカットタグは、オブジェクト・マネージャのためであると考えられるものを知らないが、私は渡されたものですSymfonyのデフォルトの翻訳者

0

:ここ

foreach ($taggedServices as $id => $tags) { 
     foreach ($tags as $attributes) { 
      $tagDefinition = $container->findDefinition($id); 
      $tagDefinition->addArgument(***); 
      ... 
     } 
    } 
+0

コンパイラパスで引き続き引数を設定したい場合は、 'CustomChain'ではなく' MainType'に引数を渡す必要があります。 –

+0

を修正しました – zenith

関連する問題