Laravel 刀片 ... 与 <?= ?>

Posted

技术标签:

【中文标题】Laravel 刀片 ... 与 <?= ?>【英文标题】:Laravel blade ... vs <?= ?>Laravel 刀片 ... 与 <?= ?> 【发布时间】:2019-04-02 08:44:43 【问题描述】:

我正在从 cakephp 迁移到 laravel,我想了解 相对于短 php 标签 &lt;?= ?&gt; 的优势是什么。我猜php标签更快,不需要模板框架进行任何处理。我知道 会进行一些转义,但在没有必要时为什么使用 而不是&lt;?= ?&gt;@foreach@if ... 与 &lt;?php foreach():?&gt; ... &lt;?php endforeach ?&gt;&lt;php if():?&gt; &lt;?php endif;?&gt; 的优势是什么。

【问题讨论】:

这些模板引擎是一个好主意,同时它们坚持分离关注点的 SOLID 原则。过去常说“将所有业务逻辑排除在您的视图之外,只有循环和回显应该在视图中”。现在,他们有自定义的逻辑语法,这意味着它实际上并不比普通的 php 脚本更好,事实上,现在你需要学习第二种语法!我曾经在一些项目中使用twig,但现在我喜欢plates php,一个现在只使用标准php 的模板引擎。只是我的意见,但并不是每个人都会同意我的观点。 事实上,标记文件需要尽可能干净,因为您可以将它们交给网页设计师或任何其他非编程人员为您设计样式。因此,到处都是&lt;?php ?&gt;(或更糟的是(&lt;?= htmlentities($value) ?&gt;)对他们来说可能是不必要的噪音。 【参考方案1】:

来自 Laravel 文档:

Blade 语句通过 PHP 的 htmlspecialchars 函数自动发送,以防止 XSS 攻击。如果您不希望您的数据被转义,您可以使用以下语法:

Hello, !! $name !!.

在回显应用程序用户提供的内容时要非常小心。在显示用户提供的数据时,始终使用转义的双花括号语法来防止 XSS 攻击。

此外,如果您使用刀片模板引擎,则使用 就像约定一样

https://laravel.com/docs/5.7/blade#displaying-data

【讨论】:

【参考方案2】:

... 仅适用于刀片文件,而&lt;?= ... ?&gt; 适用于每个 php 文件。这是我所知道的唯一区别。

【讨论】:

【参考方案3】:

的优点是它看起来很容易理解,也可以从字符串中转义特殊字符。使用@foreach 后,我们可以最小化代码,也可以简化代码以理解

【讨论】:

【参考方案4】:

谢谢大家的回答,但我仍然没有得到我正在寻找的答案......这意味着我应该澄清我应该使用 Laravel 走什么道路(因为我来自 cakephp 多年,而且那里的事情更简单模板)。我理解并提到 正在为 XSS 转义字符串,直到现在都清楚......但我的问题如下:

    我正在从 cakephp 迁移一些模板并且已经存在...不,我必须将所有内容移至 和 @foreach 和 @if

    这不是 @foreach 标签增加了开销并延长了执行时间吗?我的意思是模板最终必须将所有这些标签转换为 php 标签,对吗?

    我没有找到一个好的编辑器(或 IDE)来很好地显示这些标签,向我展示重复或决策结构的开始和结束,为标签内的语法着色和突出显示......所以它是有点烦人......至少使用我在所有编辑器中看到非常清楚,如果我关闭括号,数组如果我缺少'或“......等等。有什么好的编辑器识别刀片语法的建议吗?

    据我了解 (转义 xss)的好处,但 @foreach 与 @if 与 ??? 的好处是什么?

    1234563 ) ... 将来如果我在我的文件中使用 php 标签而不是刀片标签?例如,如果使用刀片标签,将来将我的所有文件迁移到不同的模板引擎会更容易,如果我使用 php 标签,它将无法工作?

再次感谢您分享您的想法

【讨论】:

以上是关于Laravel 刀片 ... 与 <?= ?>的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 不会使用刀片

Laravel 8:将刀片加载到另一个刀片时未定义的变量

Laravel刀片模板差异

Laravel 5.3 刀片是不是支持 <font> 标签?

Laravel 刀片模板

如何在 vue 组件中调用视图刀片 laravel?