You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony中如何解析数据库存储HTML内的Twig变量并正确渲染日期

Twig嵌套解析DateTime变量渲染方案
  • 直接使用raw/escape过滤器仅处理HTML转义逻辑,不会解析文本内嵌入的Twig语法,因此变量会直接原样输出
  • template_from_string触发的DateTime转字符串报错,核心是两个原因:一是嵌入模板的变量拼写不匹配/未正确传递上下文,二是未主动对DateTime对象做格式化输出

步骤1:确认Twig字符串加载扩展已启用

Symfony项目中使用template_from_string需要先确保StringLoaderExtension已注册,若未启用可在config/services.yaml添加配置:

services:
    Twig\Extension\StringLoaderExtension:
        tags: [twig.extension]

步骤2:修改模板渲染逻辑,传递上下文变量

不需要在嵌入的Twig代码中重复读取session,直接把控制器已经传入的edition变量作为上下文传给动态模板,减少重复读取也避免session相关问题:

<div class="contenu">
    {{ include(template_from_string(texte, {
        'edition': edition
    })) }}
</div>

步骤3:修正数据库存储的动态文本内的变量写法

首先注意属性名拼写匹配:你数据库edition表的字段是dateouverturesite,注意不要写成带下划线的date_ouverture_site。
如果需要仅展示月和日,直接用Twig的date过滤器格式化即可,示例写法:

<p><strong>PHASE D’INSCRIPTION</strong></p>
<ul>  
  <li> ouverture des inscriptions :{{ edition.dateouverturesite|date('m月d日') }} </li> 
  <li>{{ edition.date_cloture_inscriptions|date('m月d日') }}
<span style="color: red;"><strong>(heure de Paris)</strong></span>
: clôture des inscriptions
  </li> 
</ul>

如果需要法语本地化的月份名称,可使用localizeddate过滤器:

{# 法语环境下输出示例:mai 08 #}
{{ edition.dateouverturesite|localizeddate('none', 'none', 'fr', null, 'MMMM dd') }}

安全提示

如果odpf_article表的texte字段允许普通用户编辑,直接解析嵌入的Twig代码会存在代码执行、XSS注入风险,仅当该字段仅允许可信管理员编辑时可使用该方案。

内容的提问来源于stack exchange,提问作者D.Picard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:15:04