5 个非常有用的 Blade 指令,你用过哪些?

file

接下来我将带大家认识下五个 Laravel Blade 指令,这些指令将让你在解决特定问题时如虎添翼。如果你是刚接触 Laravel 的用户,这些小技巧能带你认识到 Laravel Blade 模板引擎的便捷与高效。

废话少说,让我们开始吧。

1. 检测用户是否认证

你可以通过验证用户是否为空来检测其是否认证:

@if(auth()->user())
    // 用户已认证
@endif

然而,Laravel 自带的 Blade 命令可以更简洁地实现相同的功能:

@auth
    // 用户已认证
@endauth

2. 检测用户是否为访客

与认证相反,我们可以用 auth 辅助函数的 guest() 方法来检测用户是否为访客:

@if(auth()->guest())
    // 用户未认证
@endif

不过 Laravel 也为此提供了 @guest 命令:

@guest
    // 用户未认证
@endguest

我们也可以使用 else 语句来组合这两个命令:

@guest
    // 用户未认证
@else
    // 用户已认证
@endguest

3. 如果第一个视图存在则引入,否则引入第二个

构建多主题站点可能会有一个文件如果存在就引入,否则就引入另一个的需要,你可以简单地使用条件判断来实现:

@if(view()->exists('first-view-name'))
    @include('first-view-name')
@else
    @include('second-view-name')
@endif

不过还是有一个更简洁直观的命令来做这件事:

@includeFirst(['first-view-name', 'second-view-name']);

4. 根据条件引入视图

当你只想在一定逻辑的基础上(如:一个已通过认证的用户)添加一些内容的时候,根据条件引入视图就非常有用了。

你可以使用 @if 条件来这样写:

@if($post->hasComments())
    @include('posts.comments')
@endif

我们可以只用一行命令 @includeWhen 来做到:

@includeWhen($post->hasComments(), 'posts.comments');

5. 引入一个存在的视图

如果你有自定义主题系统或者你需要动态地创建 Blade 视图,那么检查文件是否存在就是必须要做的。

可以在辅助函数 view() 上调用 exists 方法:

@if(view()->exists('view-name'))
    @include('view-name')
@endif

也可以使用 Blade 命令 includeIf 来处理:

@includeIf('view-name')

你可以通过 Blade 官方文档 了解更多实用的技巧来优化你 Laravel 项目里的前端模板。

重构快乐!

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/five-useful-lar...

译文地址:https://learnku.com/laravel/t/12328/5-ve...

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 25

不要问我为啥这篇文章发布了 5 个多小时了,还没有被翻译 :joy:

很抱歉拒绝了那么多翻译,因为这是我第一次正式参与翻译的审核,因此特别在这里说明下普遍的拒绝理由:

1、不要使用翻译软件。最明显的特点是翻译软件会把单词 you 翻译成

2、不要直译。例如文章第二段有一句

However, Laravel ships with a custom Blade directive that provides the same functionality more cleanly:

这里的 However 很多人翻译成 然而, 但是很明显这样翻译的话,读下来会让人感觉很生硬。

3、翻译的同时其实也在学习文章的内容,所以审核的时候会更多的希望翻译的同学能够真正的理解吃透,看文章的时候其实很容易就看得出翻译者对这个东西的理解程度。

请不要为了完成翻译工作而翻译,更请不要只是为了在这篇文章中留下翻译者的名字才翻译。或者换句话说,正因为文章留下了你的名字,代表了你本人,才应该更加注重翻译质量,不是么?

5年前 评论

@Soldoros 我在美国待了5年,在阿富汗待了1年,在西班牙待了2年,在德国待了1年,蒙古国待了2年,结果在本站的翻译,被你三分钟就PASS了,痛(Kuai)苦(Le)着呢。 :sob:

5年前 评论

不要问我为啥这篇文章发布了 5 个多小时了,还没有被翻译 :joy:

很抱歉拒绝了那么多翻译,因为这是我第一次正式参与翻译的审核,因此特别在这里说明下普遍的拒绝理由:

1、不要使用翻译软件。最明显的特点是翻译软件会把单词 you 翻译成

2、不要直译。例如文章第二段有一句

However, Laravel ships with a custom Blade directive that provides the same functionality more cleanly:

这里的 However 很多人翻译成 然而, 但是很明显这样翻译的话,读下来会让人感觉很生硬。

3、翻译的同时其实也在学习文章的内容,所以审核的时候会更多的希望翻译的同学能够真正的理解吃透,看文章的时候其实很容易就看得出翻译者对这个东西的理解程度。

请不要为了完成翻译工作而翻译,更请不要只是为了在这篇文章中留下翻译者的名字才翻译。或者换句话说,正因为文章留下了你的名字,代表了你本人,才应该更加注重翻译质量,不是么?

5年前 评论

@Soldoros 我在美国待了5年,在阿富汗待了1年,在西班牙待了2年,在德国待了1年,蒙古国待了2年,结果在本站的翻译,被你三分钟就PASS了,痛(Kuai)苦(Le)着呢。 :sob:

5年前 评论
wkan

标题是 指令

5年前 评论
月光

@Johnson16 这位老哥,你在说什么

5年前 评论

@overtrue :kissing_heart: 还是你带得好

5年前 评论

@JokerLinly 厉害了我的哥

5年前 评论
月光

@JokerLinly 我把 Summer 那段放上去了,查看其他版本不如直接覆盖直观。今天涨姿势了,天气很好。

老外写文章的时候,经常会喜欢使用很多形容词来夸张地表达一件事情,中文复杂而神秘,表达的时候不需要带很多形容词才能让人感受到这件事情有多简单,所以翻译的时候我觉得不需要每个形词都抠出来。语句通顺就好了。

5年前 评论

@Soldoros 我发现社区还可以查看其他版本的翻译,提了 Summer 那段改进就不用管了哈

5年前 评论

@Johnson16 我记得拒绝理由我可是写得很认真 :joy:

5年前 评论

@Soldoros 我觉得你这样翻译的话,用 但是 在这里语气会更强烈一点

5年前 评论

覆盖了,点个赞不就回来了吗~

5年前 评论

@Johnson16 突然感觉你在国外这么多年白待了。哈哈哈哈哈哈

5年前 评论

@Soldoros 回复对象错了,哈哈,应该 @JokerLinly

5年前 评论
月光

下次如果有机会,会试着像银河护卫队里说的风骚一些。

小的能力有限,那一段就将就着看哈~ :pray:

5年前 评论
月光

@JokerLinly 小姐姐看下上一层,忘了圈了。

5年前 评论
月光

抱歉把 @Summer 的优质翻译给盖了 :joy:。

还有一点,说实话第二段如果翻译成:你可以通过验证用户是否为空来检测其是否认证。然而,Laravel 自带的 Blade 命令可以更简洁地实现相同的功能 这样没有问题的话,我觉得然而应该还说得过去 :cry:

5年前 评论

@Summer 那么高质量的翻译被我不小心覆盖掉了(其实是你自己写的 Bug)

5年前 评论

@Summer 然后发现被覆盖的那段还是你自己翻译自己审核的:joy:

5年前 评论

@Summer 我发现有个尴尬的 Bug ,就是我刚刚审核通过了一段翻译,然后发现同一段翻译你已经通过了另一个人的。如此一来,那个人的翻译就被覆盖掉了。

5年前 评论

:joy:9个小时了

5年前 评论
ibucoin

@JokerLinly 哈哈,Google Translate就是翻译成然而的,这边的话,翻译成同时应该可以。

5年前 评论
Summer

@JokerLinly 同情被拒的同学 :scream:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!