php - Laravel - 带有 blade compileString 的 php eval

标签 php laravel laravel-5 eval laravel-blade

我正在尝试将 Blade 模板字符串解析为 php 格式,并使用 eval() 将字符串作为 php 代码求值

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

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

ParseError: syntax error, unexpected '<', expecting end of file

$bladecompileString() 之后的值

<?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() 将 blade 解析为 php 的方式不兼容吗?

最佳答案

manual 中所述:

The code must not be wrapped in opening and closing PHP tags, i.e. 'echo "Hi!";' must be passed instead of '<?php echo "Hi!"; ?>'. It is still possible to leave and re-enter PHP mode though using the appropriate PHP tags, e.g. 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'.

您的 Blade 包裹在 <?php 中标签,编译失败。删除封闭的 PHP 标记,但保留插页式标记。

关于php - Laravel - 带有 blade compileString 的 php eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50054158/

相关文章:

css - 响应类在 laravel 5.3 中不起作用

php - Laravel Bootstrap 4 Modal - 在带有 AJAX 调用数据的点击事件上显示模态

php - PDO 连接 : UTF-8 declaration with SET NAMES/CHARACTER SET?

PHPMailer 错误 php_network_getaddresses : getaddrinfo failed: Name or service not known

node.js - Laravel 类型错误 : Cannot read property 'js' of undefined

php - 我如何在 Controller 内的 Laravel 的不同表中获取自动递增 ID 的值作为外键

PHP preg_match_all 在长字符串上失败

php - 使用 empty() 函数检查对象是否为 null 是否正确?

php - 十月 cms 找不到驱动程序

php - Laravel 加密/解密模型数​​据