テンプレートエンジンとは何ですか?
テンプレート エンジンは、コンテンツとレイアウトを分離するのに役立つツールのようなものです。これにより、コードがクリーンになり、管理が容易になります。 HTML をデータと混合する代わりに、コンテンツの外観を定義するテンプレートを作成すると、エンジンが詳細(xì)の入力を処理します。
ブレードとは何ですか?
Blade は Laravel 獨(dú)自のテンプレート エンジンであり、作業(yè)を容易にするように設(shè)計(jì)されています。ブレード テンプレートは resource/views ディレクトリに保存され、各テンプレートには .blade.php 拡張子が付いています。構(gòu)文はシンプルで明確なので、HTML と PHP を簡(jiǎn)単に組み合わせることができます。例:
<h1>Hello, {{ $name }}!</h1>
しかし、Blade はデータを表示するためだけのものではありません。ループや條件などのロジックをテンプレートに直接追加することもできます。以下に例を示します:
@if ($user)
<p>Welcome, {{ $user->name }}!</p>
@else
<p>Please log in.</p>
@endif
ユーザーがログインしているかどうかに基づいて異なるコンテンツを表示することがいかに簡(jiǎn)単であるかがわかりますか?次回ユーザーのリストをループする必要がある場(chǎng)合は、Blade の @foreach ディレクティブを使用してみてください。これは簡(jiǎn)単で、コードを整理した狀態(tài)に保ちます。

テンプレートの継承
Blade の最も優(yōu)れた機(jī)能の 1 つは、レイアウトの再利用に役立つことです。サイトのマスター テンプレートを作成し、各ページに固有のコンテンツを入力するだけです。簡(jiǎn)単な例を次に示します:
<!-- layout.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
<div>
<p>This layout has placeholders (@yield) for the title and the main content. Now, let’s say you’re creating a home page. You can extend this layout like this:<br>
</p>
<pre class="brush:php;toolbar:false">@extends('layout')
@section('title', 'Home Page')
@section('content')
<h1>Welcome to the Home Page!</h1>
@endsection
@extends を使用するとレイアウトにリンクし、@section を使用してプレースホルダーに特定のコンテンツを入力できます。これにより、コードが DRY (繰り返さない) 狀態(tài)に保たれ、非常に管理しやすくなります。 Blade はワークフローを簡(jiǎn)素化し、優(yōu)れた Web アプリケーションの構(gòu)築という重要なことに集中できるようにします。

ブレードのコンポーネント
ブレード コンポーネントは、UI の小さな構(gòu)成要素のようなものです。それらをレゴの部品として想像してください。インターフェイスの小さな再利用可能な部分を作成し、必要な場(chǎng)所にスナップして所定の位置に取り付けることができます。これにより、コードがよりクリーンになり、保守しやすくなります。
コンポーネントを一度定義すると、それをアプリケーション全體で使用できます。異なるページ間でも同じように見(jiàn)えるボタンが必要ですか?それに対応する Blade コンポーネントを作成してください。さらに良いことに、これらのコンポーネントに屬性を渡して、コンポーネントを柔軟かつ適応可能にすることができます。
ボタン コンポーネントの簡(jiǎn)単な例を次に示します。
<!-- resources/views/components/button.blade.php -->
<button>{{ $slot }}</button>
<!-- Usage -->
<x-button>Click Me</x-button>
コンポーネント クラスを使用すると、コンポーネントを動(dòng)的にすることができます。これにより、タイプやクラスなどの屬性を渡して、ボタンの動(dòng)作やスタイルをカスタマイズできます。
// In a component class
public function render()
{
return view('components.button', [
'type' => $this->type,
'class' => $this->class,
]);
}
// In the Blade component
<button type="{{ $type }}">
<h2>
Including Subviews
</h2>
<p>Sometimes, you’ll want to break your templates into smaller pieces for better organization and reusability. Blade makes this easy with the @include directive. Think of it as a way to insert a smaller view (or subview) into a larger one.</p>
<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173172787698773.jpg" class="lazy" alt="Get The Most From Blade: Laravel&#s Templating Engine" /></p>
<h2>
Blade Directives
</h2>
<p>Blade comes packed with handy directives that make common tasks a breeze. Here are a few:<br>
@csrf: CSRF token to your forms, protecting them from cross-site request forgery attacks<br>
@method: specifies the HTTP method for forms<br>
@auth: checks if a user is authenticated<br>
@guest: checks if a user is a guest (not authenticated)<br>
</p>
<pre class="brush:php;toolbar:false"><form action="/submit" method="POST">
@csrf
@method('PUT')
<button type="submit">Submit</button>
</form>
さらにカスタマイズしたものが必要ですか?再利用可能なロジック用に獨(dú)自の Blade ディレクティブを作成できます。
たとえば、日付の書式設(shè)定が頻繁に必要になるとします。次のようにカスタム ディレクティブを定義できます:
<h1>Hello, {{ $name }}!</h1>

その他の機(jī)能
Blade には、開(kāi)発者としての生活をよりスムーズにする非常に便利な機(jī)能がいくつか備わっています。そのうちのいくつかを詳しく見(jiàn)てみましょう。
アセット URL の管理
CSS または JavaScript ファイルをリンクする必要がありますか? asset() ヘルパー関數(shù)がこれをカバーします。アセットの正しい URL が生成されるため、パスについて心配する必要はありません:
@if ($user)
<p>Welcome, {{ $user->name }}!</p>
@else
<p>Please log in.</p>
@endif
空の配列またはコレクションの処理
Blade の @forelse ディレクティブは、空の配列またはコレクションを扱う際の救世主です。これにより、アイテムをループすることができ、アイテムがない場(chǎng)合もエレガントに処理できます:
<!-- layout.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
<div>
<p>This layout has placeholders (@yield) for the title and the main content. Now, let’s say you’re creating a home page. You can extend this layout like this:<br>
</p>
<pre class="brush:php;toolbar:false">@extends('layout')
@section('title', 'Home Page')
@section('content')
<h1>Welcome to the Home Page!</h1>
@endsection
條件付きコンテンツの表示
Blade は、條件に基づいてコンテンツを表示するためのいくつかのディレクティブを提供します。
@isset: 変數(shù)が設(shè)定されているかどうかを確認(rèn)します
@empty: 変數(shù)が空かどうかを確認(rèn)します
@unless: if のように動(dòng)作しますが、逆になります
@isset を使用した例を次に示します:
<!-- resources/views/components/button.blade.php -->
<button>{{ $slot }}</button>
<!-- Usage -->
<x-button>Click Me</x-button>
XSS からの保護(hù)
Blade は出力を自動(dòng)的にエスケープして、アプリを XSS (クロスサイト スクリプティング) 攻撃から保護(hù)します。ただし、生の HTML を出力したい場(chǎng)合もあります。その場(chǎng)合は、{!! !!}:
// In a component class
public function render()
{
return view('components.button', [
'type' => $this->type,
'class' => $this->class,
]);
}
// In the Blade component
<button type="{{ $type }}">
<h2>
Including Subviews
</h2>
<p>Sometimes, you’ll want to break your templates into smaller pieces for better organization and reusability. Blade makes this easy with the @include directive. Think of it as a way to insert a smaller view (or subview) into a larger one.</p>
<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173172787698773.jpg" class="lazy" alt="Get The Most From Blade: Laravel&#s Templating Engine" /></p>
<h2>
Blade Directives
</h2>
<p>Blade comes packed with handy directives that make common tasks a breeze. Here are a few:<br>
@csrf: CSRF token to your forms, protecting them from cross-site request forgery attacks<br>
@method: specifies the HTTP method for forms<br>
@auth: checks if a user is authenticated<br>
@guest: checks if a user is a guest (not authenticated)<br>
</p>
<pre class="brush:php;toolbar:false"><form action="/submit" method="POST">
@csrf
@method('PUT')
<button type="submit">Submit</button>
</form>

高度な使い方
Blade 構(gòu)文を含む生の HTML または JavaScript を含める必要がありますか? @verbatim ディレクティブを使用して、Blade による解析の試行を停止します:
// In a service provider
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('Y-m-d H:i:s'); ?>";
});
// Usage in Blade
@datetime($dateVariable)
API を使用しますか? Blade を使用すると、テンプレート內(nèi)で JSON データを直接レンダリングすることが簡(jiǎn)単になります:
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
Livewire を使用している場(chǎng)合、Blade は Livewire とシームレスに連攜します。 JavaScript をあまり書かなくても、Blade コンポーネントを Livewire コンポーネントと併用して、動(dòng)的でインタラクティブな UI を?qū)g現(xiàn)できます。
@once ディレクティブは、コードのブロックが 1 回だけ実行されるようにします。 Blade を使用すると、渡したデータに基づいて適応する動(dòng)的コンポーネントを作成できます。これは、柔軟で再利用可能な UI 部分に最適です:
@forelse ($items as $item)
<p>{{ $item }}</p>
@empty
<p>No items found.</p>
@endforelse
@error ディレクティブを使用すると、特定のフィールドのエラー メッセージを簡(jiǎn)単に表示できます。
@isset($variable)
<p>{{ $variable }}</p>
@endisset
最初に Blade を使い始めたとき、どれだけのオプションがあるのか??少し戸惑いましたが、すぐにまったくの世界が開(kāi)かれました。今では、この多機(jī)能な機(jī)能なしでコーディングすることは考えられません。この記事が、この素晴らしいテンプレート エンジンへの道を見(jiàn)つけるのに役立つことを願(yuàn)っています。
以上がBlade を最大限に活用する: Laravel のテンプレート エンジンの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。