我有这些观点:
- /app/views/hello.blade.php
- /app/views/bye.blade.php
在控制器中我这样做:
$this->layout->content = \View::make('hello');
在hello.blade.php
我有这个:
Saying<br>
@include('bye')
在bye.blade.php
我有这个:
<strong>bye</strong>
使用@include
抛出异常:
Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_PARSE)
syntax error, unexpected ')', expecting ',' or ';'
/var/www/html/laravel/app/storage/views/706465d8306e75c61fc49b077329c696:
<?php echo $__env->make('bye', array_except(get_defined_vars(), array('__data', '__path')))); ?>
但是,如果我将hello.blade.php
的内容更改为此内容,一切正常:
Saying<br>
{{ \View::make('bye')->render() }}
我错过了什么吗?
更新1:
此处https://stackoverflow.com/a/23137421/1424329报告验证和更改Line Separator
看起来不是这种情况,因为实际上值为windows eof
格式。
更新2:
我的最后一步是审核 framework / src / Illuminate / View / Compilers / BladeCompiler.php
文件,特别是编译@include
的函数:
/**
* Compile the include statements into valid PHP.
*
* @param string $expression
* @return string
*/
protected function compileInclude($expression)
{
if (starts_with($expression, '('))
{
$expression = substr($expression, 1, -1);
}
return "<?php echo \$__env->make($expression, array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>";
}
猜猜是什么?原始来源与我的不同。这是我的compileInclude
功能:
protected function compileInclude($expression)
{
if (starts_with($expression, '('))
{
$expression = substr($expression, 1, -1);
}
return "<?php echo \$__env->make($expression, array_except(get_defined_vars(), array('__data', '__path')))); ?>";
}
然后,怎么可能这样呢?我将研究这一变化以及如何完成。目前,我想知道如何使用作曲家将原始laravel的源码拉到我的项目中?