Laravel - 刀片评论,刀片渲染导致页面崩溃

z0d*_*14c 21 php web laravel blade

我正在渲染一个主要是view::makeLaravel 形式的页面,它正在崩溃,导致ERR_CONNECTION_RESET.经过长时间的调查和许多红色鲱鱼,我开始从刀片文件中删除(不评论)随机部分的视图,并意识到,如果我

a)擦除{{Form}}表单中此部分内的2个调用

b){{-- and --}}从表格的这一部分移除

    {{--
    <div class="form-row">
      {{ Form::label('foo', 'foo:') }}
      {{ Form::text('foo') }}
    </div>
    <div class="form-row">
      {{ Form::label('foo', 'foo:') }}
      {{ Form::text('foo') }}
    </div>
    <div class="form-row">
      {{ Form::label('foo', 'foo') }}
      {{ Form::text('foo') }}
    </div>
    --}}
Run Code Online (Sandbox Code Playgroud)

页面将呈现.我不确定这里到底是什么原因.上面和下面还有其他块,虽然这是一个3-div注释掉的部分,其他都没有.

有人知道造成这种情况的原因是什么?如果重要的话,在WAMP上运行.

Ton*_*rra 27

注意:这个答案是针对Laravel 4.2提供的,但仍然适用.有一些特殊情况的Blade编译问题依赖于Laravel和/或PHP的版本,因此最好只将Blade注释用于最简单的用例.

解决方案是仅使用Blade注释进行简单评论,或者注释掉单行Blade功能.不要在Blade注释中嵌入Blade/PHP代码.使用标准PHP块注释在单个注释(PHP,HTML,多个刀片功能等)中注释掉多行代码.


有效的刀片评论:

单刀功能:

{{-- Form::text('foo') --}}
Run Code Online (Sandbox Code Playgroud)

备注:

{{-- Form Section 1 --}}
Run Code Online (Sandbox Code Playgroud)

无效的刀片评论:

语法不正确:

{{-- Form::text('foo') --  }} 
Run Code Online (Sandbox Code Playgroud)

"@"Blade内部评论

{{-- @Form::text('foo') --}} 
Run Code Online (Sandbox Code Playgroud)

嵌套PHP:

{{-- <?php 
echo "foo";
echo "bar
?> --}} 
Run Code Online (Sandbox Code Playgroud)

嵌套刀片:

{{-- 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
--}} 
Run Code Online (Sandbox Code Playgroud)

请改用PHP块注释.它们仍然可以在blade.php文件中使用

<?php /* 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
*/ ?> 
Run Code Online (Sandbox Code Playgroud)

或者,一次注释掉你的Blade一行:

{{-- HTML::form("foo") --}};
{{-- HTML::form("bar") --}};
Run Code Online (Sandbox Code Playgroud)

内幕:

对于OP的代码,Laravel的Blade Compiler将生成一个包含以下PHP/HTML的临时PHP文件:

<?php /* 
    <div class="form-row">
      <?php echo Form::label('foo', 'foo:'); ?>

<?php echo Form::text('foo'); ?>

</div>
<div class="form-row">
    <?php echo Form::label('foo', 'foo:'); ?>

    <?php echo Form::text('foo'); ?>

</div>
<div class="form-row">
    <?php echo Form::label('foo', 'foo'); ?>

    <?php echo Form::text('foo'); ?>

</div>
*/ ?>
Run Code Online (Sandbox Code Playgroud)

你的Blade评论中的Blade仍然被解析为PHP.PHP块注释中的PHP结束标记导致Apache的解析器提前结束,导致一些格式错误的PHP/HTML可能会导致连接崩溃(可能是由悬空引起的*/ ?>).

打开PHP模式并返回HTML模式,//或#不能影响它.

使用上述任何无效的Blade注释都会导致类似的编译问题.除了备注或评论刀片功能之外的任何其他内容,请避免使用Blade评论.


小智 5

Blade中的评论很简单!

{{-- Blade comments that wil not appear in the rendered HTML output --}}
Run Code Online (Sandbox Code Playgroud)

你可以做普通的 PHP 注释:

<? /* some comment here */
// or single line comments
# or these :)
?>
Run Code Online (Sandbox Code Playgroud)