Laravel 视图 使用技巧总结

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

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


判断视图是否存在


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


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


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


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


错误状态码视图页面


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

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

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


脱离控制器的视图


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


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


视图 @auth 指令


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


比较典型的方式是:


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


更短的用法:


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


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


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


foreach 语句中的 $loop 变量


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


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


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


Blade 视图中的二级 $loop 变量


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


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


创建我们自己的 Blade 指令


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


举个例子,如果需要将

标签替换为换行:


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

theme: channing-cyan


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

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


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:


@includeIf('my.header')


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


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


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


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


相关文章
|
3月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
54 0
|
5月前
|
Python
创建Django项目,实现视图,路由
创建Django项目,实现视图,路由
|
6月前
|
缓存 API 数据库
Django中的视图装饰器:扩展视图功能的利器
【4月更文挑战第15天】Django视图装饰器用于扩展视图功能,如权限验证、缓存控制和日志记录。它们是Python的高级特性,能不修改原始函数代码就添加新功能。Django提供内置装饰器,如`@login_required`(强制用户登录)、`@cache_page`(缓存视图输出)和`@csrf_protect`(CSRF保护)。同时,开发者可自定义装饰器,例如上面的`timing_decorator`用于记录视图执行时间。使用装饰器时要注意性能影响、执行顺序和参数处理。装饰器增强了代码复用性和可维护性。
|
11月前
|
Shell 数据库 Python
删除视图——基于函数的视图 Django
删除视图——基于函数的视图 Django
48 0
|
11月前
|
存储 数据库 Python
创建视图——基于函数的视图 Django
创建视图——基于函数的视图 Django
58 0
|
开发框架 前端开发 搜索推荐
Razor视图引擎
目前我们使用asp.net开发的过程中,接触了三种开发模式:一般处理程序(ashx),webform(aspx),mvc。具体关于asp.net的介绍,请看博客:[总览]Asp.net。 在学习mvc时,我对这两种搜索引擎机制:razor和winform有了新的理解。在mvc中添加视图时,不知道大家有没有注意到这两种视图的区别:
136 0
|
前端开发 JavaScript PHP
Yii2的视图是什么?底层原理是什么?
Yii2的视图是什么?底层原理是什么?
Yii2.0如何创建一个视图?底层原理是什么?
Yii2.0如何创建一个视图?底层原理是什么?
104 0
|
前端开发
symfony2框架配置页面
symfony2框架配置页面
133 0
symfony2框架配置页面
|
PHP 数据库
你可能不知道的 Laravel Eloquent 操作
你可能不知道的 Laravel Eloquent 操作
103 0