I using php7.3 on my project and use Twig in this project
After upgrade my php version to 7.4 i have some error in twig rendering.
I set some html class by Twig variable
For example:
<body class='{{global.direction}} preload {{bodyclass}}'></body>
When using php 7.3 the output of Twig render is:
<body class='ltr preload main'></body>
And no problem in my source.
But when my php upgraded to php 7.4 the output was changed!
<body class='ltr preloadmain'></body>
Twig removed on space before variable and very error was happening in my source :/
Everywhere call variable from Twig, The Twig remove all space before it!
Any solution?
How to fix it?
5
Answers
I use
twig
in mysymfony
project and I cannot reproduce the behaviour your describing.As an (ugly) fix maybe you could change to :
We just released Craft 2.8.0, which includes Twig 1.42.4 with a couple PHP 7.4 fixes.
Note that this update also bumps Craft’s minimum PHP requirement up to 5.5.
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
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 :
Find in file Lexer.php function lexData line 163 change:
to
Twig has a problem with PHP 7.4. you can change PHP version or upgrade twig to latest version
Same problem here wit an old project using Twig 1.x with no options to update.
So far, we have solved the problem inserting the html code for spaces where necessary in the templates. I mean:
<body class='{{global.direction}} preload   {{bodyclass}}'></body>