使用 Symfony Mailer 在 Twig 的模板化电子邮件中嵌入 Webpack 资产

Symfony 的邮件文档说可以轻松嵌入图像:


<img

    src="{{ email.image('@images/logo.png') }}"

    alt="Logo">

但是,我的所有资产都是由 Webpack 和 Encore 构建的。我也使用资产清单文件,因为每个资产的名称中都有一个 chunkhash。


在这种情况下如何使用 Twig 嵌入图像?我试过:


<img

    src="{{ email.image(asset('build/images/logo.png')) }}"

    alt="Logo">

但这不起作用。我最终得到一个例外,即“缺少模板”。如果我使用来自静态位置的图像,这当然效果很好。


翻过高山走不出你
浏览 261回答 2
2回答

料青山看我应如是

正如文档所说:定义一个 Twig 命名空间,该命名空间指向存储图像的任何目录,例如:# config/packages/twig.yamltwig:&nbsp; &nbsp; paths:&nbsp; &nbsp; &nbsp; &nbsp; # point this wherever your images live&nbsp; &nbsp; &nbsp; &nbsp; public/build/: build接下来,在您的电子邮件模板中:{# '@build/' refers to the Twig namespace defined earlier #}<img src="{{ email.image('@build/logo.png') }}" alt="Logo"><img src="{{ email.image('@build/subdir/logo.png') }}" alt="Logo">如果构建的图像有一些随机后缀,这将不起作用,例如在配置文件.enableVersioning()中定义的时候。webpack.config.js如果您启用了版本控制策略,您可以执行以下操作:# config/packages/twig.yamltwig:&nbsp; &nbsp; paths:&nbsp; &nbsp; &nbsp; &nbsp; public/: public并使用字符串 concat 运算符构建模板名称~:{# '@public' refers to the Twig namespace defined earlier #}<img src="{{ email.image('@public' ~ asset('build/logo.png')) }}" alt="Logo">

芜湖不芜

有两种方法可以在邮件中获取图像。第一个是嵌入的图像,第二个只是指向网络上某处图像的链接。如果要嵌入图像,则必须将图像附加到邮件中:$attachment = Swift_Image::newInstance($data, $filename, $mimeType)&nbsp; &nbsp; ->setDisposition('inline');$cid = $message->embed($attachment); // Generates "cid:something"重要的是像这样显示您的图像:<img src="cid:something" ... />所以你必须像这样渲染你的模板:$twig->render('email/email.html.twig', [&nbsp; &nbsp; 'cid' => $cid,&nbsp; &nbsp; ...]);在你的树枝模板中:<img src="{{ cid }}" ... />
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript