Laravel - 带有刀片 compileString 的 php eval
Posted
技术标签:
【中文标题】Laravel - 带有刀片 compileString 的 php eval【英文标题】:Laravel - php eval with blade compileString 【发布时间】:2018-10-07 19:30:14 【问题描述】:我正在尝试将刀片模板字符串解析为 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】:如manual中所述:
代码不能包含在打开和关闭 PHP 标记中,即必须传递
'echo "Hi!";'
而不是'<?php echo "Hi!"; ?>'
。通过使用适当的 PHP 标签,仍然可以离开并重新进入 PHP 模式,例如'echo "In PHP mode!"; ?>In html mode!<?php echo "Back in PHP mode!";'
.
你的刀片被<?php
标签包裹,编译失败。删除封闭的 PHP 标记,但保留插页式标记。
【讨论】:
以上是关于Laravel - 带有刀片 compileString 的 php eval的主要内容,如果未能解决你的问题,请参考以下文章
使用 laravel 和刀片正确分配带有 route(function) 和参数的 img src
laravel-excel 无法使用带有图像的刀片导出 xls 文件
在 Laravel 5.x 中添加带有刀片引擎代码的外部 javascript 文件?