Laravel - 带有刀片compileString的php eval

时间:2018-04-27 02:01:29

标签: php laravel laravel-5 eval blade

我正在尝试将刀片模板字符串解析为php格式,并使用 eval()将字符串评估为php代码

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

这是我到目前为止的测试代码,它抛出了异常

  

ParseError:语法错误,意外'<',   期待文件结束

compileString()

$ blade 的值

<?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 :(得分:2)

manual中所述:

  

代码不能包含在打开和关闭PHP标记中,即必须传递'echo "Hi!";'而不是'<?php echo "Hi!"; ?>'。尽管使用适当的PHP标签,例如,仍然可以离开并重新进入PHP模式。 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'

您的刀片已包含在<?php标记中,编译失败。删除封闭的PHP标记,但保留插页式标记。