symfony - Symfony 5 Mailer 使用 liipimagine_filter 嵌入图像
问题描述
在 Symfony 5 项目中,电子邮件是使用 Mailer 组件 TemplatedEmail() 函数创建的。在使用的树枝模板 ($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]).
我不确定到底发生了什么,但路径似乎很奇怪地连接在一起......
解决方案
我认为您应该将absolute_url()与assets( )结合使用。
基于此文档
如果您需要资产的绝对 URL,请使用 absolute_url() Twig
<img src="{{ absolute_url(asset('images/logo.png')) }}" alt="Symfony!"/>
<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 的 gloabl 变量。
树枝.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%'
推荐阅读
- javascript - GraphQL/Apollo 客户端:如果查询是先前查询的子集,则从缓存中获取数据
- swift - 在视图控制器中画线代替 x 轴
- spyder - 为每一行 Python IDLE 显示输出
- c# - 对异步 Main() 中的等待行为的困惑
- sql - 从不一起订购产品 p1 和 p2 的 SQL 客户
- php - 我怎样才能在哪里做多个?哪里不工作
- oracle - Jmeter,使用 Jmeter 读取 BLOB(其中包含一个 XML)
- azure - 将多个 Azure Functions 部署到同一个应用服务计划的定价(弹性高级计划 - EP1)
- android-studio - 我正在尝试运行颤振应用程序,但是在运行 gradle 任务“assemblyDebug”时会发生这种情况。我怎样才能克服这个
- assembly - 英特尔机器语言如何指定寄存器?