【问题标题】:Laravel - php eval with blade compileStringLaravel - 带有刀片 compileString 的 php eval
【发布时间】: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 的方式不兼容吗?

【问题讨论】:

    标签: php laravel laravel-5 eval blade


    【解决方案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 标记,但保留插页式标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 2018-05-31
      • 2020-06-15
      • 2018-12-18
      • 1970-01-01
      • 2020-05-23
      • 2016-09-22
      • 2014-01-25
      相关资源
      最近更新 更多