目次
1. はじめに
2. テンプレートの継承
定義レイアウト
拡張レイアウト
3. データ表示
Blade と JavaScript フレームワーク
既存のデータを出力
ネイティブ データを表示
4. プロセス制御
If ステートメント
Loop
サブビューを含める
コレクションのビューのレンダリング
注释
5、服务注入
6、扩展 Blade
ホームページ バックエンド開発 PHPチュートリアル [ Laravel 5.2 ドキュメント ] 基本 -- ブレード テンプレート エンジン

[ Laravel 5.2 ドキュメント ] 基本 -- ブレード テンプレート エンジン

Jun 20, 2016 pm 12:41 PM

1. はじめに

Blade は、他の一般的な PHP テンプレート エンジンとは異なり、PHP ネイティブの使用を制限しません。コード。すべての Blade ビューはネイティブ PHP コードにコンパイルされ、変更されるまでキャッシュされます。これは、Blade がアプリケーションのパフォーマンスに与えるオーバーヘッドが基本的にゼロであることを意味します。ブレード ビュー ファイルは、.blade.php ファイル拡張子を使用し、resources/views ディレクトリに保存されます。

2. テンプレートの継承

定義レイアウト

Blade を使用する 2 つの最大の利点は、テンプレートの継承とスライスです。まず、「メイン」ページ レイアウトを検出します。ほとんどの 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
ログイン後にコピー

この場合、サイドバー フラグメントは次のように使用します。 @parent ディレクティブは、レイアウト内のサイドバーに (上書きではなく) コンテンツを追加します。 @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 コードを Blade テンプレート ステートメントに含めることもできます。

The current UNIX timestamp is {{ time() }}.
ログイン後にコピー

注: Blade の { {}} ステートメントは、XSS 攻撃を回避するために PHP の htmlentities 関数によって処理されています。

Blade と JavaScript フレームワーク

多くの JavaScript フレームワークでも中括弧を使用してブラウザーに表示される式を表すため、@ 記号を使用して Blade レンダリング エンジンに次のことを指示できます。式は、変更せずにネイティブ形式のままにする必要があります。例:

<h1>Laravel</h1>Hello, @{{ name }}.
ログイン後にコピー

この例では、@ 記号は Blade によって削除されますが、{{ name }} 式は変更されず、JavaScript フレームワークによってレンダリングされなくなります。

既存のデータを出力

変数を出力したいが、変数が設定されているかどうかわからない場合は、次の PHP コードを使用できます:

{{ isset($name) ? $name : 'Default' }}
ログイン後にコピー

Blade では、三項演算子の使用に加えて、より簡単な方法も提供しています。

{{ $name or 'Default' }}
ログイン後にコピー

この例では、$name 変数が存在する場合はその値が表示され、それ以外の場合は「Default」が表示されます。

ネイティブ データを表示

デフォルトでは、Blade の {{ }} ステートメントは、XSS 攻撃を回避するために PHP の htmlentities 関数によって処理されています。データを処理したくない場合は、次のようにすることができます。次の構文を使用します:

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
ログイン後にコピー

Loop

条件文に加えて、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'])
ログイン後にコピー

注: __DIR__ 定数と __FILE__ 定数はキャッシュされたビューのパスを指すため、ブレード ビューでは使用しないでください。

コレクションのビューのレンダリング

Blade の @each ディレクティブを使用すると、1 行のコードで複数の部分ビューをループできます。

@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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

See all articles