首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel - Blade注释,blade渲染导致页面崩溃

Laravel - Blade注释,blade渲染导致页面崩溃
EN

Stack Overflow用户
提问于 2015-01-08 06:59:28
回答 7查看 74.2K关注 0票数 46

我正在呈现一个页面,这个页面主要是在Laravel中使用view::make的表单,它崩溃了,导致了ERR_CONNECTION_RESET。经过长时间的调查和许多转移注意力的问题,我开始从刀片文件中删除(而不是注释)用于视图的随机部分,并意识到如果我

a)删除表单这一部分内的2个{{Form}}调用

b)从表单的此部分删除{{-- and --}}

代码语言:javascript
复制
    {{--
    <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上运行,如果这很重要的话。

EN

回答 7

Stack Overflow用户

发布于 2015-01-31 03:55:38

注意:这个答案是针对Laravel 4.2给出的,但仍然适用。有一些Blade编译问题的特殊情况取决于Laravel和/或PHP的版本,所以最好只在最简单的用例中使用Blade注释。

解决方案是只对简单的备注使用刀片注释,或者注释掉单行刀片函数。不要在Blade注释中嵌套Blade/PHP代码。使用标准的PHP块注释可以注释掉单个注释中的多行代码(PHP、HTML、多个刀片函数等)。

有效刀片式服务器注释:

单刀片功能:

代码语言:javascript
复制
{{-- Form::text('foo') --}}

备注:

代码语言:javascript
复制
{{-- Form Section 1 --}}

无效的刀片注释:

语法不正确:

代码语言:javascript
复制
{{-- Form::text('foo') --  }} 

刀片注释中的"@“

代码语言:javascript
复制
{{-- @Form::text('foo') --}} 

嵌套PHP:

代码语言:javascript
复制
{{-- <?php 
echo "foo";
echo "bar
?> --}} 

嵌套刀片:

代码语言:javascript
复制
{{-- 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
--}} 

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

代码语言:javascript
复制
<?php /* 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
*/ ?> 

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

代码语言:javascript
复制
{{-- HTML::form("foo") --}};
{{-- HTML::form("bar") --}};

内部:

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

代码语言:javascript
复制
<?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 block-comment内的PHP end标记会导致Apache的解析器提前结束,导致一些格式错误的PHP/HTML可能会使您的连接崩溃(可能是由悬空的*/ ?>引起的)。

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

使用上述任何无效的Blade注释都会导致类似的编译问题。避免对除注释或注释Blade函数之外的任何内容进行Blade注释,一次删除一行。

票数 51
EN

Stack Overflow用户

发布于 2020-02-04 14:11:28

Blade中的评论非常简单!

代码语言:javascript
复制
{{-- Blade comments that wil not appear in the rendered HTML output --}}

你可以做普通的PHP注释:

代码语言:javascript
复制
<? /* some comment here */
// or single line comments
# or these :)
?>
票数 6
EN

Stack Overflow用户

发布于 2016-01-04 23:32:01

我也有类似的症状,似乎只与评论的长度有关。我用一个根本不包含任何PHP代码或blade语句的注释对其进行了测试:

代码语言:javascript
复制
{{--
0123456789abcdef
0123456789abcdef
0123456789abcdef
--}}

我不断添加重复行的副本,直到它崩溃。注释后面紧跟一个<?php endif; ?> @if语句,相应的<php if(...): ?>没有出现在编译后的模板中,但结尾的 blade 出现了,导致编译后的模板在语法上无效。

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

解决方法是使用--}}{{-- ]拆分长刀片注释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27830200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档