Symfony2不同的配置在不同的捆绑?

时间:2012-09-23 17:34:39

标签: symfony symfony-2.1

我在config.yml中为Swiftmailer提供了此配置:

swiftmailer:
    transport: gmail
    username: xxx@gmail.com
    password: xxx
    delivery_address: xxx@gmail.com
    spool:
        type: file
        path: %kernel.cache_dir%/swiftmailer/spool
    antiflood:
        threshold:            99
        sleep:                0

但我需要一个配置到一个捆绑包,另一个配置到另一个捆绑包。

我怎么做?

1 个答案:

答案 0 :(得分:1)

嗯......您实际上可以在捆绑包中获取邮件服务,并以您需要的方式配置它们。只需获取传输实例,配置其处理程序并创建新的mailer实例,并在其中注入已配置的transport

    $transport = $this->get('swiftmailer.transport');
    $transport->setHost('smtp.gmail.com');
    $transport->setEncryption('ssl');

    $handlers = $transport->getExtensionHandlers();

    $handler = $handlers[0];
    $handler->setUsername('');
    $handler->setPassword('');
    $handler->setAuthMode('login');

    $mailer = \Swift_Mailer::newInstance($transport);

我假设您要使用gmail传输,我在上面设置了一些属性。在vendor/symfony/swiftmailer-bundle/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/SwiftmailerExtension.php中,可以简单地检查此传输:

    //...
    } elseif ('gmail' === $config['transport']) {
        $config['encryption'] = 'ssl';
        $config['auth_mode'] = 'login';
        $config['host'] = 'smtp.gmail.com';
        $transport = 'smtp';
    } else {
    //...

您可以尝试通过获取其容器来配置spool(您必须在获得mailer服务之前执行此操作):

$this->getContainer()
    ->setParameter('swiftmailer.spool.file.path, '%kernel.cache_dir%/swiftmailer/spool');

但是默认情况下应该使用此文件路径。你只需要启用假脱机:

$this->getContainer()->setParameter('swiftmailer.spool.enabled', true);

antiflood可以用类似的方式配置:

$this->getContainer()->setParameter('swiftmailer.plugin.antiflood.threshold', 99);
$this->getContainer()->setParameter('swiftmailer.plugin.antiflood.sleep', 0);

希望有所帮助