Laravel - php eval с клиентом compileString

Я пытаюсь проанализировать строку шаблона лезвия в формате php и использовать eval() для оценки строки как php-кода

$array = [ 'foo' => 'bar', 'bar' => 'foo' ]; $content = '@foreach($array as $value){{$value}}@endforeach'; $blade = Blade::compileString($content); $php = eval($blade);

Это мой код для тестирования до сих пор, и он вызывает исключение

ParseError: синтаксическая ошибка, неожиданная '<', ожидающая окончания файла

значение $ blade после compileString()

<!--?php $__currentLoopData = $array; $__env--->addLoop($__currentLoopData); foreach($__currentLoopData as $value): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><!--?php echo e($value); ?--><!--?php endforeach; $__env--->popLoop(); $loop = $__env->getLastLoop(); ?>

Что вызывает эту ошибку? Является ли eval() несовместимым с тем, как compileString() обрабатывает лезвие в php?

1 ответ

Как указано в руководстве:

Код не должен быть обернут в открытии и закрытии PHP-тегов, то есть <code>'echo "Hi!";'</code> должен быть передан вместо <code>' <!--?php echo "Hi!";?-->'</code> <code>' <!--?php echo "Hi!";?-->'</code>. По-прежнему можно оставить и повторно войти в режим PHP, используя соответствующие теги PHP, например <code>'echo "In PHP mode!";?>In HTML mode! <!--?php echo "Back in PHP mode!";'</code--> <code>'echo "In PHP mode!";?>In HTML mode! <!--?php echo "Back in PHP mode!";'</code--> ,</code></code>

<code> <p> Ваше лезвие завернуто в теги <code> <!--?php</code-->, и компиляция завершается с ошибкой. Удалите встроенные теги PHP, но оставьте межстраничные теги.

licensed under cc by-sa 3.0 with attribution.