我正在渲染一个主要是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上运行。
答案 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
--}}