什麼是 Blade 指令以及如何在 Laravel 中使用它們並提供範例

laravel php 查看刀片

作為開發人員 Laravel,如果你想提高你的應用程式前端的可讀性和可維護性,那麼你需要深入研究使用 刀片指令.

Le 刀片指令 Laravel 它們是一個強大的工具,可以讓您簡化模型並使其更具表現力。 

在這篇文章中,我們將深入研究它們 刀片指令 Laravel,我們將學習如何建立自訂指令並探索一些實際用例。

預計閱讀時間: 4 minuti

什麼是刀片指令?

刀片 是與 PHP Laravel 框架捆綁在一起的模板引擎。刀片指令是 一種將 PHP 程式碼嵌入到視圖模板中,同時保持簡潔、可讀語法的方法。 他們提供了一個 包含邏輯和動態內容的便捷方式 在你看來。

刀片指令

讓我們看看其中的一些 刀片指令 綜合提供者 Laravel.

@if@else,而 @endif
@if($condition)
    // Content to display if condition is true
@else
    // Content to display if condition is false
@endif

您可以使用這些指令 有條件地顯示內容 基於一定的條件。

@switch,而 @endswitch
@switch($i)
    @case(1)
        First case...
        @break
 
    @case(2)
        Second case...
        @break
 
    @default
        Default case...
@endswitch
@foreach
@foreach($items as $item)
    // Content to display for each item
@endforeach

該指令 迭代數組或集合 並允許您處理循環中每個元素的內容。

@for, @endfor
@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

該指令 迭代數組 並允許您處理循環中每個元素的內容。

@while e @endwhile
@while (true)
    <p>I'm looping forever.</p>
@endwhile

該指令 每個條件迭代一次,當條件為假時迭代結束。

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

使用循環時,您也可以跳過目前迭代或使用指令結束循環 @continue e @break

循環變數: $loop->first, $loop->last

在循環迭代期間,變數 $loop 提供對一些有用資訊的訪問,例如當前循環的索引以及這是循環的第一次還是最後一次迭代:

@foreach ($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif
 
    @if ($loop->last)
        This is the last iteration.
    @endif
 
    <p>This is user {{ $user->id }}</p>
@endforeach

如果處於嵌套循環中,則可以存取該變數 $loop 透過父屬性的父循環:

@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is the first iteration of the parent loop.
        @endif
    @endforeach
@endforeach

我們也可以透過 $loop 變數來獲取信息, 你可以在 Laravel 官方文件中找到它們.

@unless e @endunless
@unless (Auth::check())
    You are not signed in.
@endunless
@isset, @endisset
@isset($records)
    // $records is defined and is not null...
@endisset
@empty, @endempty
@empty($records)
    // $records is "empty"...
@endempty
@include
@include('partials.header')

在目前視圖中包含另一個刀片視圖。 這有助於模組化您的模型。

@extends, @section
@extends('layouts.app')

@section('content')
    // Content specific to this view
@endsection

這些指令來了 用於建立和擴展佈局@extends 指定繼承並定義的佈局 @section 佈局中要替換的內容。

建立自訂刀片指令

Laravel 允許您建立指令 刀片 客製化以進一步簡化您的視覺化。

讓我們看看如何建立自訂指令:

定義自訂指令:
定義一個 刀片指令 個性化,您需要註冊它 Service Provider。 首先, 建立服務提供者或使用現有服務提供者。 在方法中 boot 德爾托 提供者,使用 la facade Blade 定義您的自訂指令。

use Illuminate\Support\Facades\Blade;

public function boot()
{
    Blade::directive('mydirective', function ($expression) {
        return "<?php // Your custom logic here ?>";
    });
}

我們正在定義一個名為 @mydirective。當該指令在模板中使用時 刀片,將執行閉包內的邏輯。

使用自訂指令:
現在您已經定義了自訂指令,您可以在範本中使用它 刀片 所以:

@mydirective($parameter)

用。 $parameter 您需要傳遞給您的指令的所有必需資料。

實際用例

讓我們探討一下指令的一些實際用例 刀片 個性化。

條件 CSS 類別:
您可以建立一個根據條件產生 CSS 類別的指令:

Blade::directive('classIf', function ($expression) {
    list($condition, $class) = explode(',', $expression);
    return "<?php echo ($condition) ? '$class' : ''; ?>";
});

現在,在 Blade 模板中,您可以有條件地應用以下 CSS 類別:

<div class="@classIf($user->isAdmin, 'admin')">...</div>

3.2 國際化:
建立文字翻譯指令可以使您的意見更加簡潔:

Blade::directive('trans', function ($expression) {
    return "<?php echo __('$expression'); ?>";
});

像這樣使用它:

<p>@trans('messages.welcome')</p>

相關閱讀

Ercole Palmeri

作者