php 7.4 写入变量中的 Twig 问题

Biq*_*rar 12 php variables symfony twig php-7.4

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

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

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

例如:

<body class='{{global.direction}} preload {{bodyclass}}'></body>
Run Code Online (Sandbox Code Playgroud)

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

<body class='ltr preload main'></body>
Run Code Online (Sandbox Code Playgroud)

我的来源没有问题。

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

<body class='ltr preloadmain'></body>
Run Code Online (Sandbox Code Playgroud)

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

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

有什么解决办法吗?

如何解决?

小智 6

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

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

在文件 Lexer.php 中找到函数 lexData 第 163 行的变化:

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

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


Pie*_*aud -2

twig我在我的项目中使用symfony,但无法重现您所描述的行为。

作为一个(丑陋的)修复,也许你可以更改为:

<body class="{{ global.direction ~ ' preload ' ~ bodyclass }}"></body>
Run Code Online (Sandbox Code Playgroud)