0

0

Laravel中关于Blade模板引擎的详解

黄舟

黄舟

发布时间:2017-10-11 09:06:05

|

3573人浏览过

|

来源于php中文网

原创

laravel的模版引擎采用了blade模版引擎,下面这篇文章主要给大家介绍了关于laravel中blade模板引擎的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

本文主要给大家介绍了关于Laravel中Blade模板引擎的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。

Blade 模板引擎

Blade 是 laravel 提供的一个简单强大的模板引擎,它是把 Blade 视图编译成原生的 PHP 代码并缓存起来。缓存会在 Blade 视图改变时而改变,这意味着 Blade 并没有给你的应用添加编译的负担。Blade 视图文件使用 .blade.php 后缀,一般都存储在 resources/views 目录下。

模板继承

先来看个例子




 
 App Name - @yield('title')
 
 
 @section('sidebar')
  This is the master sidebar.
 @show
 
 

@yield('content')

Blade 模板文件包含了典型的 HTML 标记。你肯定看到了 @section 和 @yield 指令。@section 指令就如它的名字所暗示的那样定义了一个内容区块,而 @yield 指令是用来显示所提供的挂件区块所包含的内容。我们已经定义好了一个基本的布局,接下来我们可以使用 Blade 的 @extends 指令来明确的指定继承这个布局。然后使用 @section 指令将挂件中的内容挂载到布局中,在上面的例子中,挂件的内容将被挂载到布局中的 @yield 部分:



@extends('layouts.master')
 
@section('title', 'Page Title')
 
@section('sidebar')
 @parent
 
 

This is appended to the master sidebar.

@endsection @section('content')

This is my body content.

@endsection

在上面的例子作用 sidebar 挂件利用 @parent 指令来追加布局中的 sidebar 部分的内容,如果不使用则会覆盖掉布局中的这部分。@parent 指令会在视图被渲染时替换为布局中的内容。

Blade 视图可以像原生 PHP 视图一样使用全局帮助函数 view 来返回渲染后的内容:


Route::get('blade', function () {
 return view('child');
});

显示数据

你可以使用花括号 { 来在视图中显示传递到视图中的变量,例如,你定义了下面的路由:


Route::get('greeting', function () {
 return view('welcome', ['name' => 'Duicode']);
})

你可以在视图中这样来输出 name 变量的内容:


Hello, {{ $name }}

当然,你也可以从原生 PHP 方法中返回内容。事实上,你可以在 Blade echo 声明中使用任意的 PHP 代码:(Blade {{}} 声明中的内容是自动通过 htmlentities 方法过滤的,用来防止 XSS 攻击。)


The current UNIX timestamp is {{ time() }}

由于很多 JavaScript 框架都使用花括号来表明所提供的表达式应该被显示在浏览器中。所以你可以使用 @ 符号来告诉 Blade 渲染引擎你需要这个表达式原样保留:


Hello, @{{ name }}

我们常用三目运算符来赋值


{{ isset($name) ? $name : 'Default' }}

Blade 提供了一个便捷的方式来替换这个三元声明:


{{ $name or 'Default' }}

默认Blade {{}} 声明会自动的使用 htmlentities 方法来避免 XSS 攻击。如果你不想你的数据被转义,你可以使用下面的语法,但是要注意,小心被攻击:


Hello, {!! $name !!}

控制结构

你可以通过 @if,@elseif,@else和 @endif 指令来使用 if 控制结构 :


@if (count($records) === 1)
 I have one record!
@elseif (count($records) > 1)
 I have multiple records!
@else
 I don't have any records!
@endif

当然为了方便,Blade 也提供了替代指令 @unless 指令:


@unless (Auth::check())
 You are not signed in.
@endunless

也可以使用 @hasSection 指令来判断提供给布局的挂件是否包含了内容:



 @hasSection('title')
 @yield('title') - App Name
 @else
 App Name
 @endif

说到控制少不了循环结构,类似PHP的:


@for ($i = 0; $i < 10; $i++)
 The current value is {{ $i }}
@endfor
 
@foreach ($users as $user)
 

This is user {{ $user->id }}

Python精要参考 pdf版
Python精要参考 pdf版

这本书给出了一份关于python这门优美语言的精要的参考。作者通过一个完整而清晰的入门指引将你带入python的乐园,随后在语法、类型和对象、运算符与表达式、控制流函数与函数编程、类及面向对象编程、模块和包、输入输出、执行环境等多方面给出了详尽的讲解。如果你想加入 python的世界,David M beazley的这本书可不要错过哦。 (封面是最新英文版的,中文版貌似只译到第二版)

下载
@endforeach @forelse ($users as $user)
  • {{ $user->name }}
  • @empty

    No users

    @endforelse @while (true)

    I'm looping forever.

    @endwhile

    Blade 也提供了终止迭代或取消当前迭代的指令:


    @foreach ($users as $user)
     @if($user->type == 1)
     @continue
     @endif
     
     
  • {{ $user->name }}
  • @if($user->number == 5) @break @endif @endforeach

    你也可以使用指令声明包含条件的方式来达到中断:


    @foreach ($users as $user)
     @continue($user->type == 1)
     
     
  • {{ $user->name }}
  • @break($user->number == 5) @endforeach

    包含子视图

    可以使用 @include 指令来包含一个视图的内容,当前视图中的变量也会被共享给子视图:


    @include('shared.errors')

    尽管子视图会自动继承父视图中的所有数据变量,你也可以直接传递一个数组变量来添加额外的变量到子视图(在 Blade 视图中避免使用 __DIR__ 和 __FILE__ 常量,因为它们会解析为视图缓存所在的位置):


    @include('view.name', ['some' => 'data'])

    你可以使用 Blade 的 @each 指令来在一行中合并引入多个视图:


    @each('view.name', $jobs, 'job')

    第一个参数是数组或集合中每个元素需要被渲染的视图名称。

    第二个参数是一个数组或集合,被用来提供迭代。

    第三个参数是要分配给当前视图的变量名。

    你也可以传递第四个参数到 @each 指令。如果所提供的数组是空数组的话,该参数所提供的视图将会被引入。


    @each('view.name', $jobs, 'job', 'view.empty')

    Blade 中的注释,这样写不会被渲染:


    {{-- This comment will not be present in the rendered HTML --}}

    Blade 允许你在已命名的堆中压入内容:


    @push('scripts')
     
    @endpush

    你可以在你需要的时候压入相同的堆任意的次数,你需要在布局中使用 @stack 来渲染堆:


    
     
     @stack('scripts')
    

    可以使用 @inject 指令来从服务容器中取回服务:


    @inject('metrics', 'App\Services\MetricsService')
    

    Monthly Revenue: {{ $metrice->monthlyRevenue() }}

    第一个参数将作为所取回服务存放的变量名,

    第二个参数是你想要在服务容器中取回的类或接口名称。

    可以使用 directvie 方法来注册指令。当 Blade 编译器遇到该指令时,它会自动的调用该指令注册时提供的回调函数并传递它的参数。

    下面的例子创建了 @datetime($val) 指令来格式化 $val:


    format('m/d/Y H:i'); ?>";
      });
     }
     
     /**
     * Register bindings in the container
     *
     * @return void
     */
     public function register() {
      //
     }
    }

    上面的例子中使用了 Laravel 的 with 帮助方法,它只是简单的返回一个所提供的对象或值,并提供方便的链式调用。最终该指令生成的 PHP 代码如下:


    format('m/d/Y H:i'); ?>

    在你更新 Blade 指令的逻辑之后,你应该删除所有已缓存的 Blade 视图,你可以使用 view:clear Artisan 命令来清除。

    总结

    相关专题

    更多
    Java 桌面应用开发(JavaFX 实战)
    Java 桌面应用开发(JavaFX 实战)

    本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

    37

    2026.01.14

    php与html混编教程大全
    php与html混编教程大全

    本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 高性能
    PHP 高性能

    本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

    37

    2026.01.13

    MySQL数据库报错常见问题及解决方法大全
    MySQL数据库报错常见问题及解决方法大全

    本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 文件上传
    PHP 文件上传

    本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

    16

    2026.01.13

    PHP缓存策略教程大全
    PHP缓存策略教程大全

    本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.13

    jQuery 正则表达式相关教程
    jQuery 正则表达式相关教程

    本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.13

    交互式图表和动态图表教程汇总
    交互式图表和动态图表教程汇总

    本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

    45

    2026.01.13

    nginx配置文件详细教程
    nginx配置文件详细教程

    本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

    9

    2026.01.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Laravel---API接口
    Laravel---API接口

    共7课时 | 0.6万人学习

    PHP自制框架
    PHP自制框架

    共8课时 | 0.6万人学习

    PHP面向对象基础课程(更新中)
    PHP面向对象基础课程(更新中)

    共12课时 | 0.7万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号