Skip to content

Laravel 视图 使用技巧总结

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

Laravel 搭建网站非常简单,相比于VUE等单页面项目,对SEO非常友好。Laravel 的 Blade 特性丰富,掌握 Blade 的使用技巧,能让我们的开发更快一步。

判断视图是否存在

我们可以在视图实际加载之前确认该视图文件是否存在。

less
if (view()->exists('my.page')) {  // 载入视图 }

甚至可以使用一个数组来加载视图,这样只有第一个视图文件确实存在的视图会被加载。

kotlin
return view()->first(['my.help', 'help'], $data);

错误状态码视图页面

如果想为一些特殊的 HTTP 返回码建立特定的错误页面。

比如 500 —— 只需要使用该码值创建视图文件,比如 resources/views/errors/500.blade.php ,

或者是 403.blade.php 等等,这些视图会在对应的错误码出现时自动被加载。

脱离控制器的视图

如果我们想让一个路由仅仅显示某个视图,不需要创建控制器,只需要使用 Route::view() 方法即可。

scala
// 不要这样做 Route::get('help', 'TextsController@help'); class TextsController extends Controller {     public function help()     {         return view('texts.help');     } } // 这样做 Route::view('help', 'texts.help');

视图 @auth 指令

不需要使用 if 来检查用户是否登录,使用 @auth 指令即可。

比较典型的方式是:

less
@if(auth()->user())     // 该用户已登录 @endif

更短的用法:

less
@auth     // 该用户已登录 @endauth

与 @auth 相对的是 @guest 指令:

less
@guest     // 该用户未登录 @endguest

foreach 语句中的 $loop 变量

在 foreach 循环中,使用 $loop 变量来查看当前是否是第一次 / 最后一次循环。

less
@foreach ($users as $user)      @if ($loop->first)         第一次迭代。      @endif      @if ($loop->last)         最后一次迭代。      @endif      <p>该用户id是:{{ $user->id }}</p> @endforeach

同样也有诸如 loop−>iteration或loop->iteration 或 loop−>iteration或loop->count 等属性。

Blade 视图中的二级 $loop 变量

我们可以在 Blade 视图的二级 foreach 循环中使用 $loop 变量来表示外层的循环变量。

less
@foreach ($users as $user)     @foreach ($user->articles as $post)         @if ($loop->parent->first)             这是父级循环中的第一次迭代         @endif     @endforeach @endforeach

创建我们自己的 Blade 指令

我们只需要在 app/Providers/AppServiceProvider.php 中添加你自己的方法。

举个例子,如果需要将
标签替换为换行:

bash
<textarea>@br2lf($post->post_text)</textarea>

theme: channing-cyan

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

本篇对Laravel常用技巧进行汇总,如果大家想了解某一个分支下的使用技巧,比如集合、Eloquent等可以查看我之前的文章。

然后将这个指令添加到 AppServiceProvider 的 boot() 方法中:

php
public function boot() {     //br to line feed     Blade::directive('br2lf', function ($string) {         return "<?php echo preg_replace('/\<br(\s*)?\/?\>/i', \"\n\", $string); ?>";     }); }

视图指令: IncludeIf,IncludeWhen,IncludeFirst

如果我们不确定 Blade 文件是否存在,我们可以使用这些条件指令。

仅当 Blade 文件存在时载入 header:

kotlin
@includeIf('my.header')

仅当用户的 role_id == 1 的时候载入 header:

kotlin
@includeWhen(auth()->user()->role_id == 1, 'my.header')

尝试加载 my.header ,如果不存在,则加载 default.header:

kotlin
@includeFirst('my.header', 'default.header')

Last but not least

技术交流群请到 这里来。 或者添加我的微信 wangzhongyang0601 ,一起学习。

感谢大家的点赞、评论、关注,谢谢大佬们的支持,感谢。

🚀 学习遇到瓶颈?想进大厂?

看完这篇技术文章,如果还是觉得不够系统,或者想在实战中快速提升?
王中阳的就业陪跑训练营,提供定制化学习路线 + 企业级实战项目 + 简历优化 + 模拟面试。

了解训练营详情