web-dev-qa-db-ja.com

Laravel-ブレードのコメント、ブレードのレンダリングによりページがクラッシュする

主にview::make in Laravelを含むフォームであるページをレンダリングしていますが、クラッシュして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>
    --}}

ページがレンダリングされます。ここでの正確な原因はわかりません。上下に他のブロックがありますが、これは3-divのコメントアウトされたセクションで、他のブロックはありません。

誰がこれを引き起こしているのか手がかりがありますか?それが重要な場合は、WAMPで実行します。

19
z0d14c

注:この回答はLaravel 4.2に対して与えられましたが、まだ適用されるはずです。 Laravelおよび/またはPHPのバージョンに依存するBladeコンパイルの問題の特別なケースがいくつかあります。そのため、最も単純なユースケースにはBladeコメントのみを使用するのが最善です。

解決策は、簡単なコメントにのみBladeコメントを使用するか、単一行のBlade関数をコメントアウトすることです。 Bladeコメント内にBlade/PHPコードをネストしないでください。標準のPHPブロックコメントを使用して、1つのコメント内で複数行のコードをコメントアウトします(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") }};
*/ ?> 

または、ブレードを一度に1行コメントアウトします:

{{-- 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が発生します(ぶら下がり*/ ?>)。

?>はPHPモードから抜け出し、HTMLモードに戻ります。//または#はそれに影響を与えません。

前述の無効なBladeコメントを使用すると、同様のコンパイルの問題が発生します。注釈またはBlade関数のコメント以外は、Bladeのコメントを一度に1行ずつ避けてください。

26
TonyArra

laravel 5.1とPHP 7(新しいHomestead)で同じ問題があります。回避策はこれを使用することでした。

<?php /* XXX */?>

これの代わりに:

{{-- XXX -- }}.
2

私が試しました

ネストされたPHP:

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

しゅう

使用中。コンテンツをコメント化せず、[〜#〜] html [〜#〜]としてコンパイルできません。

これはhtmlsource {{-- foobar --}}

私が持っているもの

Blade内のphpコードにコメントする場合

これを試して

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

OR

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

そして、ページのソースを表示してみてください

1
Manojkiran.A

同様の症状があり、コメントの長さだけに関係しているようです。 PHPコードまたはブレードステートメントがまったく含まれていないコメントでテストしました。

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

クラッシュするまで繰り返し行のコピーを追加し続けました。コメントには字句的にブレード_@if_ステートメントが続き、対応する<php if(...): ?>はコンパイルされたテンプレートになりませんでしたただし、閉じている_<?php endif; ?>_がした 、構文的に無効なコンパイル済みテンプレートになります。

これはブレードコンパイラのバグのようで、報告します。

回避策は、長いブレードコメントを-}} {{-で分割することです。

私の場合、このようなブレードのコメントが問題でした:

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