我正在新的Symfony 4应用程序中创建一个电子邮件服务。
我尝试了一百万件但没有运气。我目前只能为S4找到关于这个主题的一些资源。任何帮助表示赞赏。
这就是我想要实现的目标。我知道我必须在我的电子邮件服务中使用不同的服务,但没有运气。
<?php
namespace App\Mailer;
class Emailer
{
public function sendWelcome($email): \Swift_Mailer
{
$message = (new \Swift_Message('P****** - Welcome In!'))
->setFrom('no-reply@p****n.com')
->setTo($email)
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/registration.html.twig',
array('name' => $user->getUsername())
),
'text/html'
)
->setCharset('utf-8');
$mailer->send($message);
return true;
}
}
答案 0 :(得分:6)
首先,您需要将您的模板服务注入您的类(构造函数注入),然后您可以使用它来呈现模板。
在代码中,您可以看到我们在构造函数中对其进行类型提示,因此Symfony Dependency注入知道我们需要什么。然后我们就使用它。与您的$mailer
服务相同。
<?php
namespace App\Mailer;
use Symfony\Component\Templating\EngineInterface;
class Emailer
{
/**
* @var EngineInterface
*/
private $templating;
/**
* TestTwig constructor.
*/
public function __construct(EngineInterface $templating)
{
$this->templating = $templating;
}
public function sendWelcome($email): \Swift_Mailer
{
$message = (new \Swift_Message('P****** - Welcome In!'))
->setFrom('no-reply@p****n.com')
->setTo($email)
->setBody(
$this->templating->render(
// templates/emails/registration.html.twig
'emails/registration.html.twig',
array('name' => $user->getUsername())
),
'text/html'
)
->setCharset('utf-8');
$mailer->send($message);
return true;
}
}
答案 1 :(得分:1)
@ miles-m use
语句与注入不同。 use
语句只是使用类名作为别名来访问类。依赖注入是一种将类彼此分离的模式,这有助于更好地进行测试和调试(您可以将注入的对象替换为模拟对象等)。
注入Swift_Mailer的一种方法是作为构造函数参数,即
class Emailer
{
/** @var \Swift_Mailer $mailer */
private $mailer;
public function __construct(
EngineInterface $templating,
\Swift_Mailer $mailer <== mailer will be injected here
) : \Swift_Mailer
{
//...
$this->mailer->send($message);
}
}
class CallingClass
{
//...
$emailer = new Emailer(
//EngineInterface instance
//\Swift_Mailer instance <== injecting
);
$emailer->sendWelcome('email@example.com');
}
其他问题
$mailer->send($message)
您的$ mailer实例在哪里定义?
public function sendWelcome($email): \Swift_Mailer
return true;
true
是Swift_Mailer
的有效实例吗?