8

Symfony 2.3 アプリケーションでデフォルトで SwiftMailer を使用したいカスタム SwiftMailer プラグインを作成しました。この点に関して私が見つけることができる唯一のドキュメントはここにあります: http://symfony.com/doc/current/reference/dic_tags.html#swiftmailer-plugin

次のようにサービスを設定しました。

acme_test_bundle.swiftmailer.embed_images:
    class: Acme\TestBundle\SwiftMailer\Plugins\ImageEmbedPlugin
    tags:
        - { name: swiftmailer.plugin }

このサービスは作成されていますが、SwiftMailer はプラグインを使用していません。私は何か間違ったことをしましたか? 他にすべきことはありますか?

4

2 に答える 2

3

OPの回答に追加のコンテキストを提供します。

SwiftmailerBundle CompilerPass プロセスの Symfony 2.3 では、以下を実行します。

$mailers = $container->getParameter('swiftmailer.mailers');
foreach ($mailers as $name => $mailer) {
      $plugins = $container->findTaggedServiceIds(sprintf('swiftmailer.%s.plugin', $name));
       foreach ($plugins as $id => $args) {
            $transport->addMethodCall('registerPlugin', [new Reference($id)]);
       }
}

これに基づいて、プラグインを追加したいタグにすべてのメーラー名を の形式で追加する必要がありますswiftmailer.%mailer_name%.plugin%mailer_name%メーラーの名前に置き換えます。

mailersSwiftmailerの複数構成を使用しない場合は、Bundle Configuration で設定されているものです%mailer_name%default

$v['default_mailer'] = isset($v['default_mailer']) ? (string) $v['default_mailer'] : 'default';
$v['mailers'] = array($v['default_mailer'] => $mailer);

config.yml

swiftmailer:
    default_mailer: first_mailer #alias: default
    mailers:
      first_mailer:
        #...
      second_mailer:
        #...


    services:
        #...
        swiftmailer.plugin.array_logger:
            class: Swift_Plugins_Loggers_ArrayLogger
        swiftmailer.plugin.logger:
            class: Swift_Plugins_LoggerPlugin
            arguments: ['@swiftmailer.plugin.array_logger']
            tags:
                - { name: swiftmailer.default.plugin }
                - { name: swiftmailer.second_mailer.plugin }
于 2016-07-29T15:59:10.223 に答える