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

时间:2015-01-07 22:59:28

标签: php laravel web blade

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

a)在表单

的此部分中删除2个{{Form}}次调用

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>
    --}}

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

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

6 个答案:

答案 0 :(得分:24)

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

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


有效刀片评论:

单刀功能:

{{-- Form::text('foo') --}}

注:

{{-- Form Section 1 --}}

无效的刀片评论:

语法错误:

{{-- Form::text('foo') --  }} 

“@”内部评论

{{-- @Form::text('foo') --}} 

嵌套PHP:

{{-- <?php 
echo "foo";
echo "bar
?> --}} 

嵌套之刃:

{{-- 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
--}} 

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

<?php /* 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
*/ ?> 

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

{{-- HTML::form("foo") --}};
{{-- HTML::form("bar") --}};

<强>塔内:

对于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>
*/ ?>

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

  

?> breaks out of PHP mode and returns to HTML mode, and // or # cannot influence that.

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

答案 1 :(得分:2)

我对laravel 5.1和PHP 7(new homestead)也有同样的问题。解决方法是使用它:

<?php /* XXX */?>

而不是:

{{-- XXX -- }}.

答案 2 :(得分:2)

Blade中的注释非常简单!

   {{-- Blade comments that wil not appear in the rendered HTML output --}}

您可以执行常规的PHP注释:

<? /* some comment here */
// or single line comments
# or these :)
?>

答案 3 :(得分:1)

我有类似的症状,似乎只与评论的长度有关。我测试了它的评论根本不包含任何PHP代码或刀片语句:

{{--
0123456789abcdef
0123456789abcdef
0123456789abcdef
--}}

我不断添加重复行的副本,直到崩溃为止。词条后面的注释是@if一个裁剪,而相应的<php if(...): ?>并未在编译模板中结束,但结束<?php endif; ?>确实,结果在语法无效的编译模板中。

这似乎是刀片编译器中的一个错误,我会报告它。

解决方法是使用 - }} {{ - 。

分割长刀片评论

答案 4 :(得分:1)

我尝试过

嵌套的PHP:

{{-- <?php 
echo "foo";
echo "bar";
?> --}} 
  

@TonyArra

使用时。它不评论内容,并禁止将其编译为 HTML

这是htmlsource {{-- foobar --}}

我有哪个

那是因为如果您要注释Blade中的php代码

尝试一下

<!-- @php echo 'hai'; @endphp -->

OR

<!-- <?php echo 'hai'; ?> -->

并尝试查看页面源代码

答案 5 :(得分:0)

像这样的刀片评论是我的问题:

{{--    
    @if ($test)
        <div>something</div>
    @else
        <div>something else</div>
    @endif
--}}