Laravel - PHP Eval с лезвием compileString - PullRequest
0 голосов
/ 27 апреля 2018

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

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

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

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

значение $ 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 Ответ

0 голосов
/ 27 апреля 2018

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

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

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

...