목차
1、简介
2、模板继承
定义 布局
扩展布局
3、数据显示
Blade & JavaScript 框架
Laravel
输出存在的数据
显示原生数据
4、 流程控制
If 语句
循环
包含子视图
为集合渲染视图
注释
5、服务注入
6、扩展 Blade
백엔드 개발 PHP 튜토리얼 [ Laravel 5.2 文档 ] 基础 -- Blade 模板引擎

[ Laravel 5.2 文档 ] 基础 -- Blade 模板引擎

Jun 20, 2016 pm 12:41 PM

1、简介

Blade 是Laravel 提供的一个非常简单但很强大的模板引擎,不同于其他流行的PHP 模板引擎,Blade 在视图中并不约束你使用 PHP 原生代码。所有的 Blade 视图都会被编译成原生 PHP 代码并缓存起来直到被修改,这意味着对应用的性能而言 Blade 基本上是零开销。Blade 视图文件使用 .blade.php文件扩展并存放在 resources/views目录下。

2、模板继承

定义 布局

使用 Blade 的两个最大优点是模板继承和切片,开始之前让我们先看一个例子。首先,我们检测一个“主”页面布局,由于大多数 Web 应用在不同页面中使用同一个布局,可以很方便的将这个布局定义为一个单独的 Blade 页面:

<!-- 存放在 resources/views/layouts/master.blade.php --><html>    <head>        <title>App Name - @yield('title')</title>    </head>    <body>        @section('sidebar')            This is the master sidebar.        @show        <div class="container">            @yield('content')        </div>    </body></html>
로그인 후 복사

正如你所看到的,该文件包含典型的HTML 标记,然而,注意 @section和 @yield指令,前者正如其名字所暗示的,定义了一个内容的片段,而后者用于显示给定片段的内容。

现在我们已经为应用定义了一个布局,接下来让我们定义继承该布局的子页面吧。

扩展布局

定义子页面的时候,可以使用 Blade 的 @extends指令来指定子页面所继承的布局,继承一个 Blade 布局的视图将会使用 @section指令注入内容到布局的片段中,记住,如上面例子所示,这些片段的内容将会显示在布局中使用 @yield的地方:

<!-- 存放在 resources/views/layouts/child.blade.php -->@extends('layouts.master')@section('title', 'Page Title')@section('sidebar')    @parent    <p>This is appended to the master sidebar.</p>@endsection@section('content')    <p>This is my body content.</p>@endsection
로그인 후 복사

在本例中, sidebar片段使用 @parent指令来追加(而非覆盖)内容到布局中 sidebar, @parent指令在视图渲染时将会被布局中的内容替换。

当然,和原生 PHP 视图一样,Blade 视图可以通过 view方法直接从路由中返回:

Route::get('blade', function () {   return view('child');});
로그인 후 복사

3、数据显示

可以通过两个花括号包裹变量来显示传递到视图的数据,比如,如果给出如下路由:

Route::get('greeting', function () {    return view('welcome', ['name' => 'Samantha']);});
로그인 후 복사

那么可以通过如下方式显示 name变量的内容:

Hello, {{ $name }}.
로그인 후 복사

当然,不限制显示到视图中的变量内容,你还可以输出任何 PHP 函数,实际上,可以将任何 PHP 代码放到 Blade 模板语句中:

The current UNIX timestamp is {{ time() }}.
로그인 후 복사

注:Blade 的 {{}}语句已经经过 PHP 的 htmlentities函数处理以避免XSS 攻击。

Blade & JavaScript 框架

由于很多 JavaScript 框架也是用花括号来表示要显示在浏览器中的表达式,可以使用 @符号来告诉 Blade 渲染引擎该表达式应该保持原生格式不作改动。比如:

<h1 id="Laravel">Laravel</h1>Hello, @{{ name }}.
로그인 후 복사

在本例中, @符将会被 Blade 移除,然而, {{ name }}表达式将会保持不变,避免被 JavaScript 框架渲染。

输出存在的数据

有时候你想要输出一个变量,但是不确定该变量是否被设置,我们可以通过如下 PHP 代码:

{{ isset($name) ? $name : 'Default' }}
로그인 후 복사

除了使用三元运算符,Blade 还提供了更简单的方式:

{{ $name or 'Default' }}
로그인 후 복사

在本例中,如果 $name变量存在,其值将会显示,否则将会显示“Default”。

显示原生数据

默认情况下,Blade 的 {{ }}语句已经通过 PHP 的 htmlentities函数处理以避免 XSS 攻击,如果你不想要数据被处理,可以使用如下语法:

Hello, {!! $name !!}.
로그인 후 복사

注:输出用户提供的内容时要当心,对用户提供的内容总是要使用双花括号包裹以避免直接输出 HTML 代码。

4、 流程控制

除了模板继承和数据显示之外,Blade 还为常用的 PHP 流程控制提供了便利操作,比如条件语句和循环,这些快捷操作提供了一个干净、简单的方式来处理 PHP 的流程控制,同时保持和 PHP 相应语句的相似。

If 语句

可以使用 @if, @elseif, @else和 @endif来构造 if 语句,这些指令函数和 PHP 的相同:

@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
로그인 후 복사

循环

除了条件语句,Blade 还提供了简单指令处理 PHP 支持的循环结构,同样,这些指令函数和 PHP 的一样:

@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
로그인 후 복사

包含子视图

Blade 的 @include指令允许你很简单的在一个视图中包含另一个 Blade 视图,所有父级视图中变量在被包含的子视图中依然有效:

<div>    @include('shared.errors')    <form>        <!-- Form Contents -->    </form></div>
로그인 후 복사

尽管被包含的视图继承所有父视图中的数据,你还可以传递额外参数到被包含的视图:

@include('view.name', ['some' => 'data'])
로그인 후 복사

注:不要在 Blade 视图中使用 __DIR__和 __FILE__常量,因为它们会指向缓存视图的路径。

为集合渲染视图

你可以使用 Blade 的 @each指令通过一行代码循环引入多个局部视图:

@each('view.name', $jobs, 'job')
로그인 후 복사

该指令的第一个参数是数组或集合中每个元素要渲染的局部视图,第二个参数是你希望迭代的数组或集合,第三个参数是要分配给当前视图的变量名。举个例子,如果你要迭代一个 jobs数组,通常你需要在局部视图中访问 $job变量。

你还可以传递第四个参数到 @each指令,该参数用于指定给定数组为空时渲染的视图:

@each('view.name', $jobs, 'job', 'view.empty')
로그인 후 복사

注释

Blade 还允许你在视图中定义注释,然而,不同于 HTML 注释,Blade 注释并不会包含到 HTML 中被返回:

{{-- This comment will not be present in the rendered HTML --}}
로그인 후 복사

5、服务注入

@inject指令可以用于从服务容器中获取服务,传递给 @inject的第一个参数是服务将要被放置到的变量名,第二个参数是要解析的服务类名或接口名:

@inject('metrics', 'App\Services\MetricsService')<div>    Monthly Revenue: {{ $metrics->monthlyRevenue() }}.</div>
로그인 후 복사

6、扩展 Blade

Blade 甚至还允许你自定义指令,可以使用 directive方法来注册一个指令。当 Blade 编译器遇到该指令,将会传入参数并调用提供的回调。

下面的例子创建了一个 @datetime($var)指令格式化给定的 $var:

<?phpnamespace App\Providers;use Blade;use Illuminate\Support\ServiceProvider;class AppServiceProvider extends ServiceProvider{    /**     * Perform post-registration booting of services.     *     * @return void     */    public function boot()    {        Blade::directive('datetime', function($expression) {            return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";        });    }    /**     * 在容器中注册绑定.     *     * @return void     */    public function register()    {        //    }}
로그인 후 복사

正如你所看到的,Laravel 的辅助函数 with被用在该指令中, with方法简单返回给定的对象/值,允许方法链。最终该指令生成的 PHP 代码如下:

<?php echo with($var)->format('m/d/Y H:i'); ?>
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

종종 키워드와 추적 매개 변수로 혼란스러워하는 긴 URL은 방문자를 방해 할 수 있습니다. URL 단축 스크립트는 솔루션을 제공하여 소셜 미디어 및 기타 플랫폼에 이상적인 간결한 링크를 만듭니다. 이 스크립트는 개별 웹 사이트 a에 유용합니다

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

이것은 Laravel 백엔드가있는 React Application을 구축하는 데있어 시리즈의 두 번째이자 마지막 부분입니다. 이 시리즈의 첫 번째 부분에서는 기본 제품 목록 응용 프로그램을 위해 Laravel을 사용하여 편안한 API를 만들었습니다. 이 튜토리얼에서는 Dev가 될 것입니다

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

2025 PHP 상황 조사 발표 2025 PHP 상황 조사 발표 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Survey는 현재 PHP 개발 동향을 조사합니다. 개발자와 비즈니스에 대한 통찰력을 제공하는 프레임 워크 사용, 배포 방법 및 과제를 탐색합니다. 이 조사는 현대 PHP Versio의 성장을 예상합니다

라 라벨에서 알림 라 라벨에서 알림 Mar 04, 2025 am 09:22 AM

이 기사에서는 Laravel 웹 프레임 워크에서 알림 시스템을 탐색 할 것입니다. Laravel의 알림 시스템을 사용하면 다른 채널을 통해 사용자에게 알림을 보낼 수 있습니다. 오늘은 알림을 보낼 수있는 방법에 대해 논의합니다

See all articles