什麼是模板引擎?
模板引擎就像一個(gè)工具,可以幫助您將內(nèi)容和佈局分開。這使您的程式碼更乾淨(jìng)且更易於管理。您無需將 HTML 與資料混合,而是建立定義內(nèi)容外觀的模板,然後引擎負(fù)責(zé)填寫詳細(xì)資訊。
什麼是刀片?
Blade 是 Laravel 自己的模板引擎,它旨在讓您的生活更輕鬆。 Blade 模板儲(chǔ)存在 resources/views 目錄中,每個(gè)模板都有一個(gè) .blade.php 副檔名。語法簡單明了,讓您可以輕鬆地將 HTML 與 PHP 混合。例如:
<h1>Hello, {{ $name }}!</h1>
但是 Blade 不僅僅用於顯示資料。您也可以在範(fàn)本中新增邏輯,例如循環(huán)和條件。這是一個(gè)例子:
@if ($user)
<p>Welcome, {{ $user->name }}!</p>
@else
<p>Please log in.</p>
@endif
看看根據(jù)使用者是否登入顯示不同的內(nèi)容是多麼容易?下次您需要循環(huán)存取使用者清單時(shí),請(qǐng)嘗試使用 Blade 的 @foreach 指令。它很簡單並且可以讓你的程式碼保持整潔。

模板繼承
Blade 最好的功能之一是它如何幫助您重複使用佈局。您可以為您的網(wǎng)站建立一個(gè)主模板,然後只需填寫每個(gè)頁面的唯一內(nèi)容。這是一個(gè)簡單的例子:
<!-- 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,您可以連結(jié)到佈局,而@section允許您使用特定內(nèi)容填充佔(zhàn)位符。這使您的程式碼保持乾燥(不要重複)並且超級(jí)易於管??理。 Blade 簡化了您的工作流程,讓您更專注於重要的事情——建立出色的 Web 應(yīng)用程式。

葉片組件
刀片元件就像 UI 的小構(gòu)建塊。將它們想像成樂高積木——您可以創(chuàng)建介面的一個(gè)可重複使用的小部分,並可以將其卡入您需要的任何位置。這使您的程式碼更乾淨(jìng)且更易於維護(hù)。
您可以定義一次元件並在整個(gè)應(yīng)用程式中使用它。需要一個(gè)在不同頁面上看起來相同的按鈕嗎?為它創(chuàng)建一個(gè) Blade 組件!更好的是,您可以將屬性傳遞給這些組件,使它們靈活且適應(yīng)性強(qiáng)。
這是一個(gè)按鈕組件的簡單範(fàn)例:
<!-- resources/views/components/button.blade.php -->
<button>{{ $slot }}</button>
<!-- Usage -->
<x-button>Click Me</x-button>
您可以使用元件類別使元件動(dòng)態(tài)化。這允許您傳入類型或類別等屬性來自訂按鈕的行為或樣式。
// 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 指令以實(shí)現(xiàn)可重複使用邏輯。
例如,假設(shè)您經(jīng)常需要格式化日期。您可以像這樣定義自訂指令:
<h1>Hello, {{ $name }}!</h1>

其他特點(diǎn)
Blade 配備了一些非常方便的功能,可以讓您作為開發(fā)人員的生活更加順利。讓我們深入研究其中的一些。
管理資產(chǎn) URL
需要連結(jié)您的 CSS 或 JavaScript 檔案嗎? asset() 輔助函數(shù)可以滿足您的需求。它會(huì)為您的資源產(chǎn)生正確的 URL,因此您不必?fù)?dān)心路徑:
@if ($user)
<p>Welcome, {{ $user->name }}!</p>
@else
<p>Please log in.</p>
@endif
處理空數(shù)組或集合
Blade 的 @forelse 指令在處理空數(shù)組或集合時(shí)是一個(gè)救星。它可以讓您循環(huán)遍歷項(xiàng)目,還可以優(yōu)雅地處理沒有項(xià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
有條件的內(nèi)容顯示
Blade 提供了多種指令來根據(jù)條件顯示內(nèi)容:
@isset:檢查變數(shù)是否已設(shè)定
@empty:檢查變數(shù)是否為空
@unless:與 if 類似,但相反
這是使用 @isset 的範(fàn)例:
<!-- resources/views/components/button.blade.php -->
<button>{{ $slot }}</button>
<!-- Usage -->
<x-button>Click Me</x-button>
防範(fàn) XSS
Blade 自動(dòng)轉(zhuǎn)義輸出以保護(hù)您的應(yīng)用程式免受 XSS(跨站腳本)攻擊。但有時(shí),您可能想要輸出原始 HTML。在這種情況下,請(qǐ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>

進(jìn)階使用
需要包含包含 Blade 語法的原始 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 可以輕鬆地直接在模板中渲染 JSON 資料:
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
如果您使用 Livewire,Blade 可以與其無縫協(xié)作。您可以將 Blade 元件與 Livewire 元件一起使用,以實(shí)現(xiàn)動(dòng)態(tài)的互動(dòng)式 UI,而無需編寫太多 JavaScript。
@once 指令確保一段程式碼只運(yùn)行一次。 Blade 可讓您建立根據(jù)您傳遞的資料進(jìn)行調(diào)整的動(dòng)態(tài)元件。這對(duì)於靈活、可重複使用的 UI 片段來說非常有用:
@forelse ($items as $item)
<p>{{ $item }}</p>
@empty
<p>No items found.</p>
@endforelse
@error 指令可協(xié)助您輕鬆顯示特定欄位的錯(cuò)誤訊息:
@isset($variable)
<p>{{ $variable }}</p>
@endisset
當(dāng)我第一次開始使用 Blade 時(shí),我對(duì)自己有多少選擇感到有點(diǎn)迷失,但不久之後,整個(gè)世界就向我敞開了?,F(xiàn)在我無法想像沒有它的多功能功能的編碼。我希望這篇文章能幫助您找到進(jìn)入這個(gè)令人驚嘆的模板引擎的方法。
以上是充分利用 Blade:Laravel 的模板引擎的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!