我已经创建了一个自定义的SwiftMailer插件,我想在我的Symfony 2.3应用程序中默认使用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也没有使用该插件。我做错了什么,还有什么我应该做的吗?
答案 0 :(得分:5)
我自己设法解决了这个问题。
与Symfony 2.3文档所说的相反,您需要使用您将使用的邮件标记服务(通常是“默认”邮件)。
因此,我需要将 swiftmailer.plugin 更改为 swiftmailer.default.plugin
所以,服务定义现在是:
acme_test_bundle.swiftmailer.embed_images:
class: Acme\TestBundle\SwiftMailer\Plugins\ImageEmbedPlugin
tags:
- { name: swiftmailer.default.plugin }
答案 1 :(得分:2)
为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%
。
当不使用swiftmailer的多个mailers
配置时,%mailer_name%
是default
,它是在Bundle Configuration中设置的。
$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 }