编程语言
首页 > 编程语言> > php – 如何在Symfony 4服务中使用renderView和twig模板

php – 如何在Symfony 4服务中使用renderView和twig模板

作者:互联网

我正在新的Symfony 4应用程序中创建一个Emailer服务.

我尝试了一百万件但没有运气.我目前只能为S4找到关于这个主题的一些资源.任何帮助表示赞赏.

这就是我想要实现的目标.我知道我必须在我的Emailer服务中使用不同的服务,但没有运气.

<?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;
    }
}

解决方法:

首先,您需要将您的模板服务注入您的类(构造函数注入),然后您可以使用它来呈现模板.

在代码中,您可以看到我们在构造函数中对其进行类型提示,因此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;
    }
}

标签:symfony4,php,symfony,twig,dependency-injection
来源: https://codeday.me/bug/20190910/1798895.html