larvel的balde模板

一、简介

Blade 是 Laravel 提供的一个简单而又强大的模板引擎。 和其他流行的 PHP 模板引擎不同,Blade 并不限制你在视图中使用原生 PHP 代码。实际上,所有 Blade 视图文件都将被编译成原生的 PHP 代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着 Blade 基本上不会给你的应用增加任何负担。Blade 模板文件使用 .blade.php 作为文件扩展名,被存放在larvel的 resources/views 目录中。 Blade 视图可以使用全局 view 函数从 Route 或控制器返回

二、Blade模板的使用

(1)最基本的使用(HTML中)

html 复制代码
Hello, {{ $name }}

$name 为路由或者控制器向视图文件发送的数据,我们使用{ { } }包裹起来可以直接使用其值。我们可以将任何需要使用的值,传递给balde模板。

特别提醒:{ { } }包裹的数据,会被被 PHP 的 htmlspecialchars 函数自动转义以防范 XSS 攻击。

默认情况下, Blade { { } } 语句将被 PHP 的 htmlspecialchars 函数自动转义以防范 XSS 攻击。如果不想您的数据被转义,那么您可使用如下的语法:

html 复制代码
Hello, {!! $name !!}

(2)blade模板在Javascript中的使用

内联方式:在 Blade 模板中,当你需要将一个 PHP 变量传递到 JavaScript 中时,可以直接在 JavaScript 代码块中输出变量。例如,如果你有一个 Blade 变量$user_id,你可以这样在 JavaScript 中使用:

html 复制代码
 <script>
     var userId = '{{ $user_id }}';
     console.log(userId);
 </script>

三、Blade指令***

(1)If 语句

如果使用指令语句,我们可以直接使用blade中的变量,不再需要使用{ { } }包裹起来

html 复制代码
@if (count($records) === 1)
    // 有一条记录
@elseif (count($records) > 1)
    // 有多条记录
@else
    // 没有记录
@endif
html 复制代码
@unless (Auth::check())
    // 还没有登录
@endunless

除了上面条件指令外, 亦可作为它们所对应的 PHP 函数的快捷方式:@isset @empty

html 复制代码
@isset($records)
    // $records 已经被定义且不为 null ......
@endisset

@empty($records)
    // $records 为「空」......
@endempty

(2)switch语句

您可使用 @switch、@case、@break、@default和@endswitch语句来构造 Switch 语句:

html 复制代码
@switch($i)
    @case(1)
        First case...
        @break

    @case(2)
        Second case...
        @break

    @default
        Default case...
@endswitch

(3)循环

Blade 还提供了与 PHP 循环结构功能相同的指令。 同样,这些语句的功能和它们所对应的 PHP 语法一致:

html 复制代码
@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

@foreach ($users as $user)
    <p>This is user {{ $user->id }}</p>
@endforeach

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>No users</p>
@endforelse

@while (true)
    <p>I'm looping forever.</p>
@endwhile

使用循环时,还可以使用 和 循环或跳过当前迭代:@continue @break

html 复制代码
@foreach ($users as $user)
    @if ($user->type == 1)
        @continue
    @endif

    <li>{{ $user->name }}</li>

    @if ($user->number == 5)
        @break
    @endif
@endforeach

您还可以在指令声明中包含继续或中断条件:

html 复制代码
@foreach ($users as $user)
    @continue($user->type == 1)

    <li>{{ $user->name }}</li>

    @break($user->number == 5)
@endforeach

(4)Loop变量

在遍历 循环时,循环内部可以使用 变量。 该变量提供了访问一些诸如当前的循环索引和此次迭代是首次或是末次这样的信息的方式:foreach $loop

html 复制代码
@foreach ($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif

    @if ($loop->last)
        This is the last iteration.
    @endif

    <p>This is user {{ $user->id }}</p>
@endforeach

如果是嵌套循环,可以使用循环的 变量的 属性访问父级循环:$loop->parent

html 复制代码
@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is the first iteration of the parent loop.
        @endif
    @endforeach
@endforeach

该变量还包含各种各样有用的属性

属性 描述
$loop->index 当前迭代的索引(从 0 开始)
$loop->iteration 当前循环的迭代次数(从 1 开始)
$loop->remaining 循环剩余的迭代次数
$loop->count 被迭代的数组的元素个数
$loop->first 当前迭代是否是循环的首次迭代
$loop->last 当前迭代是否是循环的末次迭代
$loop->even 当前循环的迭代次数是否是偶数
$loop->odd 当前循环的迭代次数是否是奇数
$loop->depth 当前循环的嵌套深度
$loop->parent 嵌套循环中的父级循环

(5)选中与禁用

为方便起见,您可以使用该@checked指令轻松判断给定的 HTML 复选框输入是否被「checked」。 如果提供的条件判断为true ,则此指令将回显 :checked

html 复制代码
<input type="checkbox"
        name="active"
        value="active"
        @checked(old('active', $user->active)) />

同样,该 @selected指令可用于判断给定的选项是否被「selected」:

html 复制代码
<select name="version">
    @foreach ($product->versions as $version)
        <option value="{{ $version }}" @selected(old('version') == $version)>
            {{ $version }}
        </option>
    @endforeach
</select>

此外,该@disabled 指令可用于判断给定元素是否为「disabled」:

html 复制代码
<button type="submit" @disabled($errors->isNotEmpty())>Submit</button>

(6)request对象

在 Laravel 的 Blade 模板中,{{ request }}是一个包含当前HTTP请求相关信息的对象。它是Illuminate\Http\Request 类的一个实例。这个对象提供了访问请求的各种属性的途径,如请求的 URL、查询字符串、请求头信息、路由参数等诸多内容。

  • 获取完整的 URL:可以使用{{ request - > fullUrl() }}来获取当前请求的完整URL。例如,当用户访问example.com/products?ca...
  • 获取请求的路径部分(不包括域名和查询字符串):使用{{ request - > path() }}。对于上面的例子,它将返回/products。
  • 获取请求的路由名称(如果有):如果你的应用程序使用了命名路由,可以通过{{ request - > route() - >getName() }}来获取当前请求所匹配的路由名称。这在根据不同的路由显示不同的导航链接状态等场景下很有用。
  • 假设当前 URL 是example.com/search?q=la... request - > input('q') }}来获取查询字符串中q的值,在这里就是laravel。
  • 如果你想获取所有的查询字符串参数作为一个数组,可以使用{{ request - > all()['q'] }}(这和上面的input方法在获取单个参数时功能类似,但all方法返回所有参数的数组)。

四、安全相关

无论何时在应用程序中定义 HTML 表单,都应该在表单中包含一个隐藏的 CSRF 令牌字段,以便 CSRF 保护中间件 可以验证请求。 你可以使用 Blade 指令生成令牌字段:@csrf

html 复制代码
<form method="POST" action="/profile">
    @csrf

    ...
</form>

五、总结

Blade 是 Laravel 强大的模板引擎,其优势在于编译缓存机制不增加应用负担且不限制原生 PHP 代码使用。在基本使用上,可接收路由或控制器传来的数据并以{{ 变量 }}形式展示,可选择转义或不转义。在与 JavaScript 交互时能通过内联方式传递变量。Blade 指令丰富,如@if等条件指令、@switch语句、各类循环指令且循环中有loop变量提供多种循环信息,还有@checked等便捷的选中与禁用指令以及对request对象多属性的访问指令。在安全方面,有@csrf指令用于生成表单隐藏的 CSRF 令牌字段以保障请求安全。总之,Blade 在数据展示、逻辑控制、安全防护等多方面为 Laravel 应用的视图层提供了高效且功能完备的解决方案。

相关推荐
疯狂的程序猴几秒前
iOS混淆实战全解析,从源码混淆到IPA文件加密,打造苹果应用反编译防护体系
后端
开心就好202514 分钟前
iOS 26 文件管理实战,多工具组合下的 App 数据访问与系统日志调试方案
后端
乘风破浪酱5243616 分钟前
PO、DTO、VO的区别与应用场景详解
后端
盖世英雄酱581362 小时前
分库分表正在被淘汰
数据库·后端
间彧2 小时前
CountDownLatch详解与项目实战
后端
无名之辈J2 小时前
Spring Boot 对接微信支付
后端
junnhwan2 小时前
【苍穹外卖笔记】Day05--Redis入门与店铺营业状态设置
java·数据库·redis·笔记·后端·苍穹外卖
马尚道3 小时前
【完整版10章】Dubbo 3 深度剖析 - 透过源码认识你
后端
渣哥3 小时前
你以为只是名字不同?Spring 三大注解的真正差别曝光
javascript·后端·面试
Java水解3 小时前
微服务项目->在线oj系统(Java-Spring)----6.0
后端·微服务