Laravel Blade 在“@if”之前评论

Laravel Blade comment before "@if"

有时,在HTML中,我需要避免添加额外的白色space,但我还需要添加“@if()”块。为了实现这一点,我采用了这种方法:

some text{--

--}@if($someCondition){--

--}more text with no space between

@endif

而且这种方法效果很好。然而,在将我的开发和实时环境升级到 Laravel 5.5(从 Laravel 5.2)之后,开发环境工作正常,但实时环境将上面的 blade 渲染成下面的 HTML:

some text@if($someCondition)more text with no space between

<?php endif; ?>

... 所以 blade 注释后的 "if" 语句保留为纯文本。

我知道这是可能的,因为我的两个开发环境都能正确呈现页面。我查看了 PHP 个版本并复制了整个代码目录,但我根本找不到它们之间的任何区别,更不用说会导致处理方式不同的区别了。

为什么 Laravel 的 blade 引擎不允许在 blade 评论后立即使用“@”?

使用 PHP 7.029,Laravel 5.5,CentOS。

解决原始问题的替代方法是直接为您的 if 语句编写一些PHP代码

some text<?php

if($someCondition):

?>more text with no space between<?php
endif;
?>

(但是,我同意这不是编写模板的最有效方法,因为您将混合使用 Blade 和 PHP)

Laravel 将您的 blade 模板转换为 PHP,然后使用这些转换后的文件进行渲染。因此,如果您使用 Blade 模板直接编写一些 PHP 代码,它的工作原理是一样的。

始终可以使用 Blade 原生 php 机箱...

some text{{ if(condition) {do something} }}more text

这使内联 php 与您的 HTML 更加灵活。

我发现了这个问题。该视图缓存在开发环境中,这就是它工作的原因。

Laravel 5.3 和 5.5 之间的某个地方似乎引入了一个新错误。 blade 评论在分析 blade 的其余部分之前被删除,这可能会导致问题,正如我在此处的问题中所展示的那样。这以前在 Laravel 5.2.

中有效

我确实找到了解决方法:

some text{{null

}}@if($someCondition){--

--}more text with no space between

@endif

产生一些有用的东西:

some text<?php echo e(null); ?><?php if($someCondition): ?>more text with no space between

<?php endif; ?>