将SwiftMailer注入到Symfony2服务中

12

我有一个继承了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 Mailer已包含在内。)

2个回答

21

根据你使用的服务文件类型,你需要像你说的那样直接将它注入到你的服务中。

XML:

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

YAML:

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

您可以在构造函数中像这样简单地获取服务。

或者,如果您真的想这样做,您可以注入 service_container。但那样很不干净,因为您可以只注入您需要的服务。

只有在需要动态服务调用时才需要注入 service_container


我已经在.yml文件中添加了服务,但是我不确定如何在类的构造函数中调用它? - Andrew Atkinson
2
只需在构造函数中添加一个参数,例如 public function __construct($mailer),然后将其分配给构造函数体中的私有属性即可。 - Teo.sk
1
一个入门指南:将该服务添加为上面的答案。然后像上面的注释一样添加到构造函数中。然后在构造函数中添加$this->mailer = $mailer;。然后您可以使用:$this->mailer->send($message); - Andrew Atkinson

1
在 services.yml 文件中(Symfony 4 示例)
mailer:
    class: \Swift_Mailer

myClass:
    class: x\x
    arguments:
        - "@mailer"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接