Внедрить SwiftMailer в службу symfony2

У меня есть служба, которая расширяет 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 сюда, но как? (обычно класс обслуживания расширяет "Общий", поэтому включена быстрая почтальон.)

Ответ 1

В зависимости от того, какой служебный файл вы используете, вам необходимо ввести его в свою службу прямо так, как вы сказали.

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 необходима только в том случае, если вам нужен динамический вызов службы.

Ответ 2

В services.yml (пример symfony 4)

mailer:
    class: \Swift_Mailer

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