Symfony YAML如何保留换行?多行文本渲染问题咨询
Symfony YAML多行文本支持及渲染换行问题解决
别担心,Symfony的YAML完全支持多行文本,你遇到的换行消失问题其实是Twig渲染到HTML时的默认行为,不是YAML的锅。下面一步步给你讲怎么搞定:
1. 先确保YAML的写法正确
你用的|字面量样式是对的,但YAML对缩进非常敏感,必须保证多行内容和键名有正确的缩进。正确的写法应该是这样:
# messages.en.yml test: | Here is line 1 Here is line 2
注意:冒号后面要加空格,换行后的每一行都要缩进(通常是2个空格,和父级键的缩进保持一致),这样YAML解析器才会把这两行当成带换行的字符串保存。
2. 解决Twig渲染时的换行合并问题
HTML默认会把文本中的换行、多个空格都转换成单个空格,所以即使YAML里保留了换行,直接用{{ 'test'|trans }}渲染到页面上还是会变成一行。这里有两个常用的解决办法:
方法一:用nl2br过滤器转成<br>标签
Twig的nl2br过滤器可以把字符串里的换行符\n转换成HTML的<br>标签,这样浏览器就会识别并显示换行:
{# form.html.twig #} {{ 'test'|trans|nl2br }}
方法二:用<pre>标签保留原始格式
如果你的文本需要保留原始的换行和空格(比如代码块、纯文本内容),可以把渲染的内容放在<pre>标签里:
{# form.html.twig #} <pre>{{ 'test'|trans }}</pre>
<pre>标签会按照文本的原始格式显示,包括换行和空格。
额外补充:YAML的其他多行写法
除了|(保留所有换行),YAML还有>(折叠换行,把连续的换行转换成单个空格),以及带双引号的多行写法(比如"Line 1\nLine 2"),不过对于翻译消息来说,|的写法最直观好维护。
内容的提问来源于stack exchange,提问作者Baby Webmaster
相关产品推荐
相关产品推荐

