skip to Main Content

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


  1. I use twig in my symfony project and I cannot reproduce the behaviour your describing.

    As an (ugly) fix maybe you could change to :

    <body class="{{ global.direction ~ ' preload ' ~ bodyclass }}"></body>
    
    Login or Signup to reply.
  2. 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.

    Login or Signup to reply.
  3. 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:

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

    to

    if (isset($this->positions[2][$this->position][0]) && ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0])) {
       $text = rtrim($text);
    }
    
    Login or Signup to reply.
  4. Twig has a problem with PHP 7.4. you can change PHP version or upgrade twig to latest version

    Login or Signup to reply.
  5. 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 &#32; {{bodyclass}}'></body>

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search