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!";' 而不是 '&lt;?php echo "Hi!"; ?&gt;'。通过使用适当的 PHP 标签,仍然可以离开并重新进入 PHP 模式,例如'echo "In PHP mode!"; ?&gt;In html mode!&lt;?php echo "Back in PHP mode!";'.

你的刀片被&lt;?php标签包裹,编译失败。删除封闭的 PHP 标记,但保留插页式标记。

【讨论】:

以上是关于Laravel - 带有刀片 compileString 的 php eval的主要内容,如果未能解决你的问题,请参考以下文章

带有刀片组件的 Laravel 抛出目标类视图不存在

使用 laravel 和刀片正确分配带有 route(function) 和参数的 img src

laravel-excel 无法使用带有图像的刀片导出 xls 文件

在 Laravel 5.x 中添加带有刀片引擎代码的外部 javascript 文件?

在laravel 7刀片中获取带有if not null条件的URL参数

Laravel 刀片模板不使用 slug 渲染