我试图将刀片模板字符串解析为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的方式不兼容吗?
发布于 2018-04-27 02:21:30
如手册所述
代码不能包装在打开和关闭PHP标记中,即必须传递
'echo "Hi!";'而不是'<?php echo "Hi!"; ?>'。通过使用适当的PHP标记(例如'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'),仍然可以离开并重新进入PHP模式。
刀片被包装在<?php标记中,编译失败。移除封装的PHP标记,但保留间隙标记。
https://stackoverflow.com/questions/50054158
复制相似问题