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 注入这里,但是如何?(通常服务类扩展了“通用”,因此包含了快速邮件。)

4

2 回答 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仅当您需要动态服务调用时才需要注入。

于 2013-01-16T15:00:16.970 回答
1

在 services.yml 中(symfony 4 示例)

mailer:
    class: \Swift_Mailer

myClass:
    class: x\x
    arguments:
        - "@mailer"
于 2019-04-19T13:56:57.383 回答