Symfony 2:如何在控制器外部或服务中渲染模板?

2024-02-27

如何在控制器外部或服务中渲染模板?

我一直在关注 Symfony2 的文档。Doc http://symfony.com/doc/current/book/service_container.html#core-symfony-and-third-party-bundle-services

namespace Acme\HelloBundle\Newsletter;

use Symfony\Component\Templating\EngineInterface;

class NewsletterManager
{
    protected $mailer;

    protected $templating;

    public function __construct(
        \Swift_Mailer $mailer,
        EngineInterface $templating
    ) {
        $this->mailer = $mailer;
        $this->templating = $templating;
    }

    // ...
}

这是我打电话给我的助手的地方:

$transport = \Swift_MailTransport::newInstance();
$mailer = \Swift_Mailer::newInstance($transport);
$helper = new MailHelper($mailer);
$helper->sendEmail($from, $to, $subject, $path_to_twig, $arr_to_twig);

所以这里缺少的第一件事是构造方法的第二个参数:

$helper = new MailHelper($mailer);

但是我如何实例化 EngineInterface 呢?

当然不可能是:

new EngineInterface();

我完全迷失在这里了。

我需要做的就是为正在发送的电子邮件呈现一个模板。


仅注入 @twig 并将渲染的模板传递给邮件正文:

<?php

namespace Acme\Bundle\ContractBundle\Event;

use Acme\Bundle\ContractBundle\Event\ContractEvent;

class ContractListener
{
    protected $twig;
    protected $mailer;

    public function __construct(\Twig_Environment $twig, \Swift_Mailer $mailer)
    {
        $this->twig = $twig;
        $this->mailer = $mailer;
    }

    public function onContractCreated(ContractEvent $event)
    {
        $contract = $event->getContract();

        $body = $this->renderTemplate($contract);

        $projectManager = $contract->getProjectManager();

        $message = \Swift_Message::newInstance()
            ->setSubject('Contract ' . $contract->getId() . ' created')
            ->setFrom('[email protected] /cdn-cgi/l/email-protection')
            ->setTo('[email protected] /cdn-cgi/l/email-protection')
            ->setBody($body)
        ;
        $this->mailer->send($message);
    }

    public function renderTemplate($contract)
    {
        return $this->twig->render(
            'AcmeContractBundle:Contract:mailer.html.twig',
            array(
                'contract' => $contract
            )
        );
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 2:如何在控制器外部或服务中渲染模板? 的相关文章

随机推荐

  • 重置被拒绝的 HTML 通知

    我有一个网络应用程序 在其中使用 HTML 通知 如果用户第一次允许它并开始使用它 它工作正常 但是如果用户第一次通过单击阻止按钮阻止通知 然后尝试通过某些用户手势再次请求权限 则浏览器不会触发 允许 阻止 弹出窗口 这是我第二次触发许可
  • 按键时的 JTable 编辑

    我正在尝试以编程方式开始编辑当前行的第三列JTable在按键上 我已经实现了一个 KeyListener 其中keyReleased 包含这段代码 if e getKeyCode KeyEvent VK ENTER myTab change
  • 在 Powershell 中优雅地停止

    How do I catch and handle Ctrl C in a PowerShell script I understand that I can do this from a cmdlet in v2 by including
  • JVM 何时抛出 OutOfMemoryError

    我们正在运行一个有时会 冻结 的 Java 应用程序 因为某些线程正在使用几乎所有堆 尽管 JVM 执行的 Full GC 持续了 60 秒以上 但应用程序从未因 OutOfMemoryError 错误而终止 我从 Java 文档中读到 如
  • amqp 与 amqplib - 哪个 Node.js amqp 客户端库更好?

    这些 amqp 客户端库之间有什么区别 哪一款最值得推荐 主要区别是什么 我会推荐amqp node https github com squaremo amqp node and bramqp https github com bakke
  • Json.Net 没有以相同的方式序列化小数两次

    我正在测试我正在处理的购物车的 Json NET 序列化 并注意到当我序列化 gt 反序列化 gt 再次序列化时 我发现某些文件的尾随零格式有所不同decimal字段 这是序列化代码 private static void TestRoun
  • 检测 Excel 设置的语言并将其显示在文件的单元格中

    我正在设计一组它们之间相关的相关Excel文件 目标是引用彼此文档的宏可以在任何给定的计算机 路径中工作 因此 我使用了一组相对路径 使宏能够正常工作 我使用了以下功能 CELDA nombrearchivo A 1 nombredearc
  • UIPasteboard 字符串从 Today 扩展返回 null

    似乎在 iOS 9 Xcode 7 beta 5 中 我无法访问 UIPasteboard generalPasteboard string 来自我的 今日 小部件扩展 因为每次无论内容如何 它都会返回 NULL 我浏览了发行说明 但没有看
  • PHP ftp_put 返回“无法建立数据连接:连接被拒绝”

    我有一台通过 PHP 运行一些 FTP 的 PC 我知道它在 1 2 个月前还可以工作 但现在我返回它 发现该 PC 不再工作了 我知道我一直在使用电脑 但我想不出可能会发生什么变化 PHP 抛出错误消息读取 无法建立数据连接 连接被拒绝
  • 本机 PHP 5.6 OpenSSL Composer.phar 无法在 Windows 上启用加密

    我在 Windows 计算机上使用本机 PHP 5 6 时遇到问题 当我尝试运行 Composer 更新 php Composer phar update 时出现此错误 Composer Downloader TransportExcept
  • Google OAuth2 集成错误 400:redirect_uri_mismatch

    我收到这个错误Error 400 redirect uri mismatch即使在给出正确的重定向 uri 之后 您可以查看下面的图片以供参考 它适用于我的本地主机 但它在我的服务器上显示此错误 我的域名看起来像https xxx topL
  • Golang - “go run main.go”和编译之间的区别

    在用 Go 编写了一些脚本之后 我问自己 编译一个 go file 以及稍后的执行和go run FILE go在性能等方面的命令 如果我使用这些方法之一启动 Web 服务有什么优势吗 go run只是一步编译然后运行的快捷方式 虽然它对开
  • 绝对位置和溢出:隐藏

    div div div div 我需要显示比父元素大的子元素 但不删除 Overflow hidden 这可能吗 父元素有position relative 子元素一旦超出其父元素的边界 就会被删除 元素定义了额外的 css 为了清晰起见
  • C++ const 强制转换,不确定这是否安全

    这似乎是一个愚蠢的问题 但我确实需要澄清这一点 这会给我的程序带来任何危险吗 Is the const cast甚至需要 如果我更改输入指针值 它将安全地工作std string或者它会产生未定义的行为 到目前为止 唯一担心的是 每当我修改
  • 具有一个视频轨道和多个音频轨道的 AVPlayer

    我试图让我的应用程序中的播放器能够拥有一个视频轨道和多个音频轨道 针对不同的语言 我已经这样做了 但播放器无法启动 AVMutableComposition composition AVMutableComposition composit
  • 我无法列出 Raspberry Pi 附近的 BLE 设备(python、btmgmt)

    我想通过使用 cron 脚本调用的 python 脚本来扫描 Raspberry 环境中的 ble 设备 但是当我在 cron 中执行此操作时 我的意思是我添加到 sudo crontab e 我总是得到一个空列表 当我以 pi 用户身份登
  • GDB:列出崩溃进程的所有映射内存区域

    我从 x86 Linux 机器 内核 2 6 35 22 如果重要的话 上的死进程中获得了全堆核心转储 我正在尝试在 GDB 中对其进行调试 是否有一个我可以使用的 GDB 命令 意思是 显示该进程分配的所有内存地址区域的列表 换句话说 我
  • 在 Golang 中构建动态(条件)WHERE SQL 查询

    我正在使用 golang go reform PostgreSQL 我想做的是一个 REST 搜索实用程序 一切都很顺利 直到我遇到条件搜索查询 这里的 条件 意味着我在表中有 10 列要搜索 并且可能有大量的组合 所以我无法单独处理它们
  • 使用联合类型进行类型推断 - 不存在最佳通用类型

    所以 我正在使用 TypeScript 进行类型推断 我将提供两个示例 它们在调用时会产生相同的结果 但是在其中一个示例中 由于 没有最佳常见类型 TypeScript 无法推断类型 三元运算符的示例 function foo a bool
  • Symfony 2:如何在控制器外部或服务中渲染模板?

    如何在控制器外部或服务中渲染模板 我一直在关注 Symfony2 的文档 Doc http symfony com doc current book service container html core symfony and third