将SwiftMailer注入symfony2服务

问题描述 投票:11回答:2

我有一个扩展UserManager的服务,所以当我这样做时:

$message = \Swift_Message::newInstance()
            ->setSubject('~')
            ->setFrom('~')
            ->setTo('~')
            ->setBody('~', 'text/html');
        $this->get('mailer')->send($message);

我收到错误:

Fatal error: Call to undefined method My\MyBundle\Service\ServiceClass::get()

我知道这是因为我需要将swiftmailer注入这里,但是如何? (通常服务类扩展'Generic',因此包含了swift邮件程序。)

symfony dependency-injection swiftmailer
2个回答
20
投票

根据您使用的服务文件类型,您需要像您所说的那样直接将其注入您的服务。

XML:

<services>
        <service id="sample.service" class="%sample.service.class%">
            <argument type="service" id="mailer" />
        </service>
</services>

Yamla:

services:
    sample.service:
        class:     %sample.service.class%
        arguments: [@mailer]

您可以像这样简单地在构造函数中获取服务。或者,如果你真的想要,你可以注入service_container。但这真的很脏,因为你可以注入你需要的服务。

只有在需要动态服务呼叫时,才需要注入service_container


0
投票

在services.yml(symfony 4示例)

mailer:
    class: \Swift_Mailer

myClass:
    class: x\x
    arguments:
        - "@mailer"
© www.soinside.com 2019 - 2024. All rights reserved.