我有这个代码...
namespace AppBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
class NotificationCommand extends ContainerAwareCommand
{
protected function configure()
{
$this->setName('app:notif');
}
public function execute(InputInterface $input, OutputInterface $output)
{
$message = \Swift_Message::newInstance()
->setFrom([
'from@example.com' => 'Example'
])
->setTo('to@example.com')
->setSubject('Subject')
->setBody(
$this->getContainer()->renderView(
'emails/notify.html.twig', [
'foo' => 'bar',
]
),
'text/html'
);
$this->getContainer()->get('mailer')->send($message);
}
}
我收到一个错误消息
试图调用一个名为class的未定义方法“ renderView” “ ContainerV5drzta \ appDevDebugProjectContainer”。
如何在Command(Symfony 3.4)中使用Swift Mailer?
答案 0 :(得分:1)
您可以通过依赖注入这些服务来解决问题,这也是Symfony试图实现的目标。
public function __construct(
EngineInterface $templating,
\Swift_Mailer $mailer,
) {
$this->templating = $templating;
$this->mailer = $mailer;
parent::__construct();
}
您现在可以在execute()
中渲染模板,如下所示:
$message = (new \Swift_Message('My message'))
->setFrom('foo@bar.com')
->setTo('bar@foo.com')
->setBody($this->templating->render('mytemplate.html.twig'), 'text/html');
$this->mailer->send($message);