我可以成功使用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)
注意:您必须在控制器中呈现模板并传递给此电子邮件功能,或者在您的服务中注入模板服务并进行渲染.