如何从Symfony2服务类发送电子邮件?

Uda*_*dan 9 php email symfony

我可以成功使用followig代码从控制器发送电子邮件:

$message = \Swift_Message::newInstance()
    ->setSubject('Hello Email')
    ->setFrom('send@example.com')
    ->setTo('recipient@example.com')
    ->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
;
$this->get('mailer')->send($message);
Run Code Online (Sandbox Code Playgroud)

我如何修改代码以从服务类中使用它?

Ale*_*lex 11

您的服务具有外部依赖性,尤其是邮件服务.您可以注入服务容器本身,也可以注入邮件服务.

如果您的服务只需要邮件服务而没有别的,我建议只注入邮件服务.

以下是如何配置DIC以使用setter注入邮件服务:

<service id="my.service" class="Acme\DemoBundle\Service\Hello">
    <call method="setMailer">
        <argument type="service" id="mailer" />
    </call>
</service>
Run Code Online (Sandbox Code Playgroud)

在你的课堂上,写下你的二传手:

class Hello
{
    protected $mailer;

    public function setMailer($mailer)
    {
        $this->mailer = $mailer;
    }

    public function sendEmail()
    {
        $message = \Swift_Message::newInstance()
            ->setSubject('Hello Email')
            ->setFrom('send@example.com')
            ->setTo('recipient@example.com')
            ->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
        ;
        $this->mailer->send($message);
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:您必须在控制器中呈现模板并传递给此电子邮件功能,或者在您的服务中注入模板服务并进行渲染.

  • 为什么不构造注入? (3认同)
  • `renderView`从哪里来?:p (2认同)
  • @noetix也是,并且我在这里使用2.6.1(尽管我认为这是通用的吗?),但``templation`中不存在`renderView`,这是一个控制器快捷方式.然而,它只是一个1:1的别名`templating`的`render()`大声笑我只是提起来因为这让我在前几天绊了一下 (2认同)