php 7.4 在写入变量中的 Twig 问题

2022-01-22 00:00:00 variables php symfony php-7.4 twig

我在我的项目中使用 php7.3 并在这个项目中使用 Twig

I using php7.3 on my project and use Twig in this project

将我的 php 版本升级到 7.4 后,我在树枝渲染中出现了一些错误.

After upgrade my php version to 7.4 i have some error in twig rendering.

我通过 Twig 变量设置了一些 html 类

I set some html class by Twig variable

例如:

<body class='{{global.direction}} preload {{bodyclass}}'></body>

当使用 php 7.3 时,Twig 渲染的输出是:

When using php 7.3 the output of Twig render is:

<body class='ltr preload main'></body>

我的来源没有问题.

但是当我的 php 升级到 php 7.4 时,输出发生了变化!

But when my php upgraded to php 7.4 the output was changed!

<body class='ltr preloadmain'></body>

在变量之前在空间上删除了 Twig,并且在我的源代码中发生了非常错误:/

Twig removed on space before variable and very error was happening in my source :/

Twig 到处调用变量,Twig 删除它之前的所有空格!

Everywhere call variable from Twig, The Twig remove all space before it!

有什么办法吗?

如何解决?

推荐答案

对我有用的一般答案(Opencart Twig 也是)与评论中提到的修复 Simo Heinonen 有关,即https://github.com/twigphp/Twig/pull/3004/commits/1fb0f9701d8443085495cd264

The general answer that worked for me (Opencart Twig too) is related to the fix Simo Heinonen mentioned in the comments i.e. https://github.com/twigphp/Twig/pull/3004/commits/1fb0f9701d8443083495cd2645e8a0c45d54c34d

不同版本的代码会与上面显示的有所不同.对于 Opencart Twig(大多数版本,但使用 oc 3.0.3.3 进行了测试),显然修复了它:

Different versions will have somewhat different code than shown above. For Opencart Twig (most versions but tested with oc 3.0.3.3) what apparently fixed it was :

在文件 Lexer.php 中查找函数 lexData 第 163 行更改:

Find in file Lexer.php function lexData line 163 change:

if (isset($this->positions[2][$this->position][0]) ) {
    $text = rtrim($text);
}

if (isset($this->positions[2][$this->position][0]) && ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0])) {
   $text = rtrim($text);
}

相关文章