【问题标题】:Embedding a Webpack asset inside Twig's templated e-mail using Symfony Mailer使用 Symfony Mailer 在 Twig 的模板电子邮件中嵌入 Webpack 资产
【发布时间】:2019-09-21 06:17:35
【问题描述】:

Symfony's mailer documentation 表示可以轻松嵌入图像:

<img
    src="{{ email.image('@images/logo.png') }}"
    alt="Logo">

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

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

<img
    src="{{ email.image(asset('build/images/logo.png')) }}"
    alt="Logo">

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

【问题讨论】:

  • 你试过{{ email.image(asset('build/images/logo.png')) }}吗?
  • 当然,这样不行。

标签: php symfony twig webpack-encore


【解决方案1】:

如文档所述:定义一个指向存储图像的目录的 Twig 命名空间,例如:

# config/packages/twig.yaml
twig:
    paths:
        # point this wherever your images live
        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.yaml
twig:
    paths:
        public/: public

并使用字符串连接运算符~构建模板名称:

{# '@public' refers to the Twig namespace defined earlier #}
<img src="{{ email.image('@public' ~ asset('build/logo.png')) }}" alt="Logo">

【讨论】:

    【解决方案2】:

    有两种方法可以在您的邮件中获取图片。第一个是嵌入的图像,第二个只是指向网络上某处图像的链接。如果您想嵌入图片,您必须将图片附加到您的邮件中:

    $attachment = Swift_Image::newInstance($data, $filename, $mimeType)
        ->setDisposition('inline');
    
    $cid = $message->embed($attachment); // Generates "cid:something"
    

    重要的是像这样显示你的图像:

    <img src="cid:something" ... />
    

    所以你必须像这样渲染你的模板:

    $twig->render('email/email.html.twig', [
        'cid' => $cid,
        ...
    ]);
    

    在你的树枝模板中:

    <img src="{{ cid }}" ... />
    

    【讨论】:

    • 我不再使用 Swiftmailer,并在 Mailer 的“模板化电子邮件”中专门询问了如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2011-06-29
    • 2015-09-03
    相关资源
    最近更新 更多