Laravel Blade - công cụ tạo framework PHP nhanh chóng
20/04/2023 01:24
Blade là công cụ tạo khuôn mẫu đơn giản nhưng mạnh mẽ đi kèm với Laravel. Không giống như một số công cụ tạo khuôn mẫu PHP, Blade không hạn chế bạn sử dụng mã PHP đơn giản trong các mẫu của mình
Blade là công cụ tạo khuôn mẫu đơn giản nhưng mạnh mẽ đi kèm với Laravel. Không giống như một số công cụ tạo khuôn mẫu PHP, Blade không hạn chế bạn sử dụng mã PHP đơn giản trong các mẫu của mình. Trên thực tế, tất cả các mẫu Blade được biên dịch thành mã PHP đơn giản và được lưu vào bộ nhớ cache cho đến khi chúng được sửa đổi, nghĩa là Blade về cơ bản không thêm chi phí vào ứng dụng của bạn. Các tệp mẫu phiến sử dụng phần .blade.php
mở rộng tệp và thường được lưu trữ trong resources/views
thư mục.
Chế độ xem phiến có thể được trả về từ các tuyến hoặc bộ điều khiển bằng trình view
trợ giúp chung. Tất nhiên, như đã đề cập trong tài liệu về lượt xem , dữ liệu có thể được chuyển đến dạng xem Blade bằng cách sử dụng view
đối số thứ hai của trình trợ giúp:
Route::get('/', function () {
return view('greeting', ['name' => 'Finn']);
});
Livewire
Bạn muốn đưa các mẫu Blade của mình lên một tầm cao mới và dễ dàng xây dựng các giao diện động? Kiểm tra Laravel Livewire . Livewire cho phép bạn viết các thành phần Blade được tăng cường chức năng động thường chỉ có thể thực hiện được thông qua các khung giao diện người dùng như React hoặc Vue, cung cấp một cách tiếp cận tuyệt vời để xây dựng các giao diện người dùng phản ứng, hiện đại mà không có sự phức tạp, kết xuất phía máy khách hoặc các bước xây dựng của nhiều khung JavaScript.
Hiển thị dữ liệu
Bạn có thể hiển thị dữ liệu được chuyển đến chế độ xem Blade của mình bằng cách gói biến trong dấu ngoặc nhọn. Ví dụ: đưa ra tuyến đường sau:
Route::get('/', function () {
return view('welcome', ['name' => 'Samantha']);
});
Bạn có thể hiển thị nội dung của namebiến như sau:
Hello, {{ $name }}.
Bạn không bị giới hạn trong việc hiển thị nội dung của các biến được truyền cho dạng xem. Bạn cũng có thể lặp lại kết quả của bất kỳ hàm PHP nào. Trên thực tế, bạn có thể đặt bất kỳ mã PHP nào bạn muốn bên trong câu lệnh Blade echo:
The current UNIX timestamp is {{ time() }}.
Mã hóa thực thể HTML
Theo mặc định, Blade (và Laravel e
helper) sẽ mã hóa kép các thực thể HTML. Nếu bạn muốn tắt mã hóa kép, hãy gọi Blade::withoutDoubleEncoding
phương thức từ boot
phương thức của bạn AppServiceProvider
:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Blade::withoutDoubleEncoding();
}
}
Hiển thị dữ liệu chưa thoát
Theo mặc định, {{ }}
các câu lệnh Blade được tự động gửi qua htmlspecialchars
chức năng của PHP để ngăn chặn các cuộc tấn công XSS. Nếu bạn không muốn thoát dữ liệu của mình, bạn có thể sử dụng cú pháp sau:
Khung Blade & JavaScript
Vì nhiều khung JavaScript cũng sử dụng dấu ngoặc nhọn "xoăn" để biểu thị một biểu thức nhất định sẽ được hiển thị trong trình duyệt, nên bạn có thể sử dụng ký @
hiệu để thông báo cho công cụ kết xuất Blade rằng một biểu thức sẽ không bị ảnh hưởng. Ví dụ:
<h1>Laravel</h1>
Hello, @{{ name }}.
Trong ví dụ này, @
biểu tượng sẽ bị xóa bởi Blade; tuy nhiên, {{ name }}
biểu thức sẽ không bị ảnh hưởng bởi công cụ Blade, cho phép nó được hiển thị bởi khung JavaScript của bạn.
Biểu @
tượng cũng có thể được sử dụng để thoát khỏi các chỉ thị của Blade:
{{-- Blade template --}}
@@if()
<!-- HTML output -->
@if()
Kết xuất JSON
Đôi khi, bạn có thể chuyển một mảng vào chế độ xem của mình với ý định hiển thị mảng đó dưới dạng JSON để khởi tạo một biến JavaScript. Ví dụ:
<script>
var app = <?php echo json_encode($array); ?>;
</script>
Tuy nhiên, thay vì gọi thủ công json_encode
, bạn có thể sử dụng Illuminate\Support\Js::from
chỉ thị phương thức. Phương from
thức chấp nhận các đối số giống như json_encode
chức năng của PHP; tuy nhiên, nó sẽ đảm bảo rằng JSON kết quả được thoát đúng cách để đưa vào trong các trích dẫn HTML. Phương thức này from
sẽ trả về một JSON.parse
câu lệnh JavaScript chuỗi sẽ chuyển đổi đối tượng hoặc mảng đã cho thành một đối tượng JavaScript hợp lệ:
<script>
var app = {{ Illuminate\Support\Js::from($array) }};
</script>
Các phiên bản mới nhất của khung ứng dụng Laravel bao gồm một Js
mặt tiền, cung cấp khả năng truy cập thuận tiện vào chức năng này trong các mẫu Blade của bạn:
Chỉ @verbatim
thị
Nếu bạn đang hiển thị các biến JavaScript trong một phần lớn mẫu của mình, bạn có thể bọc HTML trong lệnh @verbatim
để bạn không phải thêm ký @
hiệu vào trước mỗi câu lệnh Blade echo:
@verbatim
<div class="container">
Hello, {{ name }}.
</div>
@endverbatim
Chỉ thị lưỡi dao
Ngoài kế thừa mẫu và hiển thị dữ liệu, Blade còn cung cấp các phím tắt thuận tiện cho các cấu trúc điều khiển PHP phổ biến, chẳng hạn như câu lệnh điều kiện và vòng lặp. Các phím tắt này cung cấp một cách làm việc rất rõ ràng, ngắn gọn với các cấu trúc điều khiển PHP trong khi vẫn quen thuộc với các đối tác PHP của chúng.
câu lệnh if
Bạn có thể xây dựng if
các câu lệnh bằng cách sử dụng các lệnh @if
, @elseif
, @else
và @endif
. Các lệnh này hoạt động giống hệt với các đối tác PHP của chúng:
@if (count($records) === 1)
I have one record!
@elseif (count($records) > 1)
I have multiple records!
@else
I don't have any records!
@endif
Để thuận tiện, Blade cũng cung cấp một @unless
chỉ thị:
@unless (Auth::check())
You are not signed in.
@endunless
Ngoài các lệnh có điều kiện đã được thảo luận, các lệnh @isset
và @empty
có thể được sử dụng làm lối tắt thuận tiện cho các hàm PHP tương ứng của chúng:
@isset($records)
// $records is defined and is not null...
@endisset
@empty($records)
// $records is "empty"...
@endempty
Chỉ thị xác thực
Lệnh @auth
and @guest
có thể được sử dụng để nhanh chóng xác định xem người dùng hiện tại có được xác thực hay là khách:
@auth
// The user is authenticated...
@endauth
@guest
// The user is not authenticated...
@endguest
Nếu cần, bạn có thể chỉ định trình bảo vệ xác thực cần được kiểm tra khi sử dụng lệnh @auth
và @guest
:
Chỉ thị môi trường
Bạn có thể kiểm tra xem ứng dụng có đang chạy trong môi trường sản xuất hay không bằng @production
lệnh:
@auth('admin')
// The user is authenticated...
@endauth
@guest('admin')
// The user is not authenticated...
@endguest
// Production specific content...
Hoặc, bạn có thể xác định xem ứng dụng có đang chạy trong một môi trường cụ thể hay không bằng @env
lệnh:
Phần Chỉ thị
Bạn có thể xác định xem phần kế thừa mẫu có nội dung hay không bằng cách sử dụng @hasSection
lệnh:
Bạn có thể sử dụng sectionMissing
lệnh để xác định xem một phần không có nội dung:
Báo cáo chuyển đổi
Các câu lệnh chuyển đổi có thể được xây dựng bằng cách sử dụng các lệnh @switch
, @case
, @break
và :@default
@endswitch
vòng lặp
Ngoài các câu lệnh có điều kiện, Blade cung cấp các lệnh đơn giản để làm việc với các cấu trúc vòng lặp của PHP. Một lần nữa, mỗi chỉ thị này hoạt động giống hệt với các đối tác PHP của chúng:
Khi sử dụng các vòng lặp, bạn cũng có thể bỏ qua bước lặp hiện tại hoặc kết thúc vòng lặp bằng lệnh @continue
và @break
:
Bạn cũng có thể bao gồm điều kiện tiếp tục hoặc ngắt trong phần khai báo chỉ thị:
Biến vòng lặp
Trong khi lặp qua một foreach
vòng lặp, một $loop
biến sẽ có sẵn bên trong vòng lặp của bạn. Biến này cung cấp quyền truy cập vào một số bit thông tin hữu ích, chẳng hạn như chỉ mục vòng lặp hiện tại và đây là lần lặp đầu tiên hay cuối cùng của vòng lặp:
$loop
Nếu bạn đang ở trong vòng lặp lồng nhau, bạn có thể truy cập biến của vòng lặp cha thông qua parent
thuộc tính:
Biến này $loop
cũng chứa nhiều thuộc tính hữu ích khác:
Tài sản | Sự miêu tả |
---|---|
$loop->index |
Chỉ số của vòng lặp hiện tại (bắt đầu từ 0). |
$loop->iteration |
Vòng lặp hiện tại (bắt đầu từ 1). |
$loop->remaining |
Các lần lặp còn lại trong vòng lặp. |
$loop->count |
Tổng số mục trong mảng được lặp lại. |
$loop->first |
Cho dù đây là lần lặp đầu tiên thông qua vòng lặp. |
$loop->last |
Cho dù đây là lần lặp cuối cùng thông qua vòng lặp. |
$loop->even |
Liệu đây có phải là một lần lặp chẵn thông qua vòng lặp hay không. |
$loop->odd |
Cho dù đây là một lần lặp lẻ thông qua vòng lặp. |
$loop->depth |
Mức lồng nhau của vòng lặp hiện tại. |
$loop->parent |
Khi ở trong vòng lặp lồng nhau, biến vòng lặp cha. |
Các lớp & kiểu có điều kiện
Lệnh @class
biên dịch có điều kiện một chuỗi lớp CSS. Lệnh chấp nhận một mảng các lớp trong đó khóa mảng chứa lớp hoặc các lớp bạn muốn thêm vào, trong khi giá trị là một biểu thức boolean. Nếu phần tử mảng có một khóa số, nó sẽ luôn được đưa vào danh sách lớp được hiển thị:
Tương tự như vậy, @style
lệnh này có thể được sử dụng để thêm các kiểu CSS nội tuyến vào một phần tử HTML một cách có điều kiện:
Thuộc tính bổ sung
Để thuận tiện, bạn có thể sử dụng @checked
lệnh này để dễ dàng cho biết liệu đầu vào hộp kiểm HTML đã cho có được "đánh dấu" hay không. Lệnh này sẽ lặp lại checked
nếu điều kiện được cung cấp ước tính thành true
:
Tương tự như vậy, @selected
lệnh có thể được sử dụng để cho biết liệu một tùy chọn đã chọn có nên được "chọn" hay không:
Ngoài ra, @disabled
lệnh này có thể được sử dụng để cho biết liệu một phần tử đã cho có nên bị "tắt" hay không:
Ngoài ra, @readonly
lệnh này có thể được sử dụng để cho biết liệu một phần tử đã cho có phải là "chỉ đọc" hay không:
Ngoài ra, @required
lệnh này có thể được sử dụng để cho biết liệu một phần tử nhất định có phải là "bắt buộc" hay không:
Chỉ thị của Blade @include
cho phép bạn bao gồm chế độ xem Blade từ bên trong chế độ xem khác. Tất cả các biến có sẵn cho chế độ xem chính sẽ được cung cấp cho chế độ xem được bao gồm:
Mặc dù chế độ xem được bao gồm sẽ kế thừa tất cả dữ liệu có sẵn trong chế độ xem chính, nhưng bạn cũng có thể chuyển một mảng dữ liệu bổ sung sẽ được cung cấp cho chế độ xem được bao gồm:
Nếu bạn cố gắng xem @include
một chế độ xem không tồn tại, Laravel sẽ báo lỗi. Nếu bạn muốn bao gồm một chế độ xem có thể có hoặc không, bạn nên sử dụng lệnh @includeIf
:
Nếu bạn muốn @include
xem liệu một biểu thức boolean đã cho có giá trị là true
hoặc hay không false
, bạn có thể sử dụng lệnh @includeWhen
và @includeUnless
:
Để bao gồm chế độ xem đầu tiên tồn tại từ một mảng chế độ xem nhất định, bạn có thể sử dụng lệnh includeFirst
: