Symfony 5 Mailer 使用 liipimagine_filter 嵌入图像
Posted
技术标签:
【中文标题】Symfony 5 Mailer 使用 liipimagine_filter 嵌入图像【英文标题】:Symfony 5 Mailer embedded images with liip imagine_filter 【发布时间】:2021-07-16 19:43:05 【问题描述】:在 Symfony 5 项目中,电子邮件是使用 Mailer 组件 TemplatedEmail() 函数创建的。 在使用的 twig 模板 ($templatedEmail->htmlTemplate(..)) 中,使用嵌入图像
<img src=" email.image('@v_images/user-'~user.id~'/v.jpg') ">
包含用户特定的图像。 这工作正常。 当试图通过
将该图像传递给liip过滤器时<img src=" email.image('@v_images/user-'~user.id~'/v.jpg') | imagine_filter('v_watermark') ">
图像不再渲染。 我正在考虑应用解析器设置以使 liip 能够从非标准目标路径读取 - 但没有找到任何合理的设置。 文档并没有让我获得任何有用的信息。 有关如何使 liip 与 Mailer 嵌入图像一起工作的任何提示将对我有很大帮助。
编辑(感谢@ArleighHix):
我也尝试将过滤器嵌套在调用中
<img src=" email.image('@v_images/user-'~user.id~'/v.jpg' | imagine_filter('v_watermark')) ">
导致以下错误:
Unable to find template "@v_images/user-1https:/127.0.0.1:8000/media/cache/resolve/v_watermark/v.jpg" (looked into: [SENSIBLE_LOCAL_PATH_IN_PROJECT]).
我不确定到底发生了什么,但路径似乎被奇怪地连接了......
【问题讨论】:
您是否尝试将过滤器嵌套在对email.image
的调用中?喜欢email.image( ('path')|imagine_filter('v_watermark') )
我现在做了 - 导致此错误:无法找到模板“@v_images/user-1https:/127.0.0.1:8000/media/cache/resolve/v_watermark/v.jpg”(查看进入:[SENSIBLE_LOCAL_PATH_IN_PROJECT])。我不确定到底发生了什么,但路径似乎被奇怪地连接起来......
将您尝试的问题以及它产生的错误添加到问题中,我会投票赞成也许其他人知道。
为什么不尝试使用asset()
symfony.com/doc/current/reference/twig_reference.html#asset 来获取图像路径?将其与 imagine_filter
github.com/liip/LiipImagineBundle#example 结合使用
@vincentPHILIPPE 我认为资产只返回公共路径。此处使用的图像来自非公共路径,因此嵌入在电子邮件中。我可能是错误地重新考虑了公共路径唯一的想法......
【参考方案1】:
我认为你应该使用 absolute_url() 与 asset() 结合使用。
基于此doc
如果您需要资产的绝对 URL,请使用 absolute_url() Twig
<img src=" absolute_url(asset('images/logo.png')) " />
<link rel="shortcut icon" href=" absolute_url('favicon.png') ">
解决方案 1
我认为这个应该可以:
<img src=" email.image((absolute_url(asset('@v_images')) ~ /user-'~user.id~'/v.jpg) | imagine_filter('v_watermark')) ">
解决方案 2
如果它不起作用,你应该添加一个带有基本 url 的全局变量。
twig.yaml
twig:
globals:
app_base_url: '127.0.0.1:8000' // Put your base url here
并将其用作:
<img src=" email.image(app_base_url ~ asset('@v_images') ~ /user-'~user.id~'/v.jpg) | imagine_filter('v_watermark')) ">
当然,当您将网站发布到网络上时,base_url 会发生变化。
您可以使用服务参数'%app.base_url%'
在你的配置文件中定义它:
services_dev.yaml
parameters:
app.base_url: 'https://127.0.0.1:8000/'
services_prod.yaml
parameters:
app.base_url: 'https://your.website.url/'
然后将您的 twig.yaml 更新为
twig:
globals:
app_base_url: '%app.base_url%'
【讨论】:
感谢您的方法。然而,在asset() 上使用absolute_url() 并不会改变将资产存储在公共场所的需求——在我的情况下,这不是一种选择。以上是关于Symfony 5 Mailer 使用 liipimagine_filter 嵌入图像的主要内容,如果未能解决你的问题,请参考以下文章
Symfony messenger 和 mailer:如何添加 binding_key?
将 Postmark 与 Symfony Mailer 集成的问题
如何使用 Symfony Mailer 组件禁用“verify_peer”?
Symfony:无法用实际定义“”替换别名“swiftmailer.mailer.default.transport.real”
“php bin/console server:run”在运行时紧跟“composer require symfony/mailer”