Nhảy tới nội dung
Phiên bản: 7.1.0

Blade Templates

Blade Templates là một hệ thống tạo mẫu (templating engine) được sử dụng rộng rãi trong framework Laravel của PHP. Nó cung cấp một cách đơn giản và hiệu quả để tạo ra các giao diện người dùng (UI) động và linh hoạt. Một file Blade thường có phần mở rộng là .blade.php

Hiển thị dữ liệu

Trong Blade Templates, cả {{ }}{!! !!} đều được sử dụng để hiển thị dữ liệu trong view. Tuy nhiên, chúng có những khác biệt quan trọng về cách xử lý dữ liệu đầu vào.

{{ }}: Escape HTML

Chức năng: Khi sử dụng {{ }}, Blade sẽ tự động escape (làm vô hiệu hóa) các thẻ HTML và các ký tự đặc biệt khác trước khi hiển thị. Điều này giúp bảo vệ ứng dụng khỏi các cuộc tấn công XSS (Cross-Site Scripting).

Sử dụng: Nên sử dụng {{ }} để hiển thị dữ liệu người dùng nhập vào hoặc bất kỳ dữ liệu nào có thể chứa các thẻ HTML không mong muốn.

{{ $user->name }}

{!! !!}: Không Escape HTML

Chức năng: Khi sử dụng {!! !!}, Blade sẽ hiển thị dữ liệu nguyên bản, bao gồm cả các thẻ HTML. Điều này có nghĩa là nếu dữ liệu đầu vào chứa các thẻ HTML, chúng sẽ được hiển thị trực tiếp trên trang.

Sử dụng: Chỉ nên sử dụng {!! !!} khi bạn hoàn toàn chắc chắn rằng dữ liệu đầu vào là tin cậy và không chứa bất kỳ mã độc hại nào. Ví dụ, khi hiển thị dữ liệu được định dạng sẵn bằng một trình soạn thảo WYSIWYG.

{!! $content !!}

Điều kiện trong Blade

Trong Blade Templates, các chỉ thị @if, @else@elseif được sử dụng để kiểm tra các điều kiện logic và hiển thị nội dung tương ứng. Cấu trúc của chúng tương tự như câu lệnh if trong PHP, giúp bạn tạo ra các giao diện động và linh hoạt.

@if (điều_kiện)
// Nếu điều kiện đúng, mã này sẽ được thực thi
@else
// Nếu điều kiện sai, mã này sẽ được thực thi
@endif

Vòng lặp trong Blade

Trong Blade Templates, các chỉ thị vòng lặp @for, @foreach, @while giúp chúng ta lặp qua các mảng, đối tượng hoặc một dãy số để hiển thị dữ liệu một cách lặp đi lặp lại.

@for ($i = 1; $i <= 10; $i++)
Đây là lần lặp thứ {{ $i }}.
@endfor

@foreach ($products as $product)
<div class="product">
<h2>{{ $product->name }}</h2>
<p>{{ $product->description }}</p>
<p>Giá: {{ $product->price }}</p>
</div>
@endforeach
@while ($i < 10)
Đây là lần lặp thứ {{ $i }}.
$i++;
@endwhile

break, continue

Blade Templates cung cấp hai chỉ thị @break@continue để điều khiển luồng thực thi trong các vòng lặp.

@foreach ($products as $product)
@if ($product->price > 1000)
@break
@endif
<li>{{ $product->name }}</li>
@endforeach
@foreach ($products as $product)
@if ($product->isOutOfStock())
@continue
@endif
<li>{{ $product->name }}</li>
@endforeach

Sử dụng

Theme

Để render một file Blade Templates trong theme bạn sử dụng method Theme::view hoặc Theme::partial

Để hiển thị trực tiếp mã đã biên dịch từ file blade

Theme::view($path, $args)
  • path : đường dẫn đến file blade Ví dụ:
Theme::view('user/index')
//Đường dẫn ưu tiên views/<theme_current>/theme-child/user/login.blade.php
//Đường dẫn views/<theme_current>/user/login.blade.php
  • args : mảng chứa các biến cần truyền vào file blade ví dụ:
Theme::view('user/index', ['users' => $users])

mảng ['users' => $users] được tạo và truyền vào view user/index

Trong Blade: Bạn có thể truy cập biến $users như bình thường:

@foreach ($users as $user)
<p>{{ $user->name }}</p>
@endforeach

Để lấy mã biên dịch từ file blade bạn sử dụng Theme::partial

$view = Theme::partial($path, $args)

Plugin

Để render một file Blade Templates trong plugin bạn sử dụng method Plugin::view hoặc Plugin::partial

Để hiển thị trực tiếp mã đã biên dịch từ file blade

Plugin::view($plugin, $path, $args)
  • plugin: tên thư mục plugin
  • path : đường dẫn đến file blade Ví dụ:
Plugin::view('my-plugin', 'user/index')
//Đường dẫn ưu tiên 1: views/<theme_current>/my-plugin/user/login.blade.php
//Đường dẫn ưu tiên 2: views/plugins/my-plugin/views/user/login.blade.php
//Đường dẫn ưu tiên 3: views/plugins/my-plugin/template/user/login.blade.php
  • args : mảng chứa các biến cần truyền vào file blade

Để lấy mã biên dịch từ file blade bạn sử dụng Plugin::partial

$view = Plugin::partial($plugin, $path, $args)