Search code examples
symfonydependency-injectionswiftmailer

Inject SwiftMailer into symfony2 service


I have a service which extends UserManager, so when I do:

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

I get the error:

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

I know this is because I need to inject the swiftmailer into here, but how? (usually the service class extends 'Generic' so the swift mailer is included.)


Solution

  • Depending on what kind of service file you are using you need to inject it into your service directly like you said.

    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]
    

    You can simply grab the service in your constructor like this. Or if you really want, you can inject the service_container. But that's really dirty, since you can just inject the services you need.

    Injection the service_container is only needed if you need a dynamic service call.