lightncandy icon indicating copy to clipboard operation
lightncandy copied to clipboard

SafeString fails with FLAG_EXTHELPER | FLAG_BESTPERFORMANCE

Open storeman opened this issue 3 years ago • 0 comments

The PHP Code:

require('./vendor/autoload.php');
use LightnCandy\LightnCandy;

class HelperClass
{
    public static function printStrong ($value)
    {
        return new \LightnCandy\SafeString('<strong>'.$value.'</strong>');
    }
}


// The Template:
$template = <<<VAREND
{{ PrintStrong "Hello world" }}
VAREND;


$phpStr = LightnCandy::compile($template, array(
    // Used compile flags
    'flags' => LightnCandy::FLAG_HANDLEBARS
        | LightnCandy::FLAG_BESTPERFORMANCE
        | LightnCandy::FLAG_EXTHELPER,
    'helpers' => [
        'PrintStrong' => HelperClass::class . '::printStrong'
    ],
));

echo "Generated PHP Code:\n$phpStr\n";

// Input Data:
$data = array();

// Save the compiled PHP code into a php file
file_put_contents('render.php', '<?php ' . $phpStr . '?>');

// Get the render function from the php file
$renderer = include('render.php');

echo "Result:\n" . $renderer($data);

The Issue:

I expect to get the normal HTML returned. When omitting LightnCandy::FLAG_BESTPERFORMANCE or LightnCandy::FLAG_EXTHELPER, it works as expected.

But when both flags are set, the HTML is escaped, thus SafeString is ignored.

storeman avatar Aug 25 '21 10:08 storeman