Bài 2: Cấu trúc điều kiện trong Blade
Chào mừng bạn đến với Bài 2! Trong quá trình xây dựng giao diện, việc ẩn/hiện hoặc thay đổi nội dung dựa trên các điều kiện (như trạng thái đăng nhập, quyền hạn, dữ liệu trả về) là điều không thể thiếu. Blade cung cấp các chỉ thị (directives) cực kỳ gọn gàng thay thế cho các khối <?php if (...): ?> dài dòng.
1. Cú pháp cơ bản: @if, @elseif, @else
Cấu trúc điều kiện này hoạt động hoàn toàn giống với câu lệnh if...else trong PHP thuần, nhưng cú pháp sạch sẽ và dễ đọc hơn rất nhiều:
HTML
@if ($role == 'admin')
<p>Chào quản trị viên, bạn có toàn quyền quản lý.</p>
@elseif ($role == 'editor')
<p>Chào biên tập viên, bạn có thể duyệt bài viết.</p>
@else
<p>Chào khách, chúc bạn đọc báo vui vẻ!</p>
@endif
2. Phủ định điều kiện với @unless
Thay vì phải viết @if (! $isAdmin) vừa khó nhìn vừa dễ nhầm dấu chấm than, Blade cung cấp từ khóa @unless (có nghĩa là "trừ khi" hoặc "nếu không phải"):
HTML
@unless ($user->isBanned())
<p>Tài khoản của bạn đang hoạt động bình thường.</p>
@endunless
(Đoạn code trên tương đương với: Nếu người dùng không bị ban, thì hiển thị nội dung bên trong).
3. Kiểm tra biến tồn tại hoặc trống: @isset và @empty
Khi làm việc với dữ liệu từ Controller truyền sang, đôi khi biến chưa được khởi tạo hoặc có giá trị rỗng. Blade hỗ trợ kiểm tra nhanh chóng:
-
@isset: Kiểm tra xem biến đã được thiết lập (tồn tại và không phải lànull) hay chưa.HTML
@isset($records) <p>Đã tìm thấy dữ liệu bản ghi.</p> @endisset -
@empty: Kiểm tra xem một biến có đang trống hay không (rỗng, mảng rỗng, chuỗi rỗng, hoặcnull).HTML
@empty($cartItems) <p>Giỏ hàng của bạn đang trống.</p> @endempty
4. Cấu trúc rẽ nhánh nhiều trường hợp: @switch
Khi bạn cần kiểm tra một biến với nhiều giá trị khác nhau, thay vì dùng quá nhiều @elseif, hãy dùng @switch:
HTML
@switch($status)
@case(1)
<p>Trạng thái: Chờ duyệt</p>
@break
@case(2)
<p>Trạng thái: Đang xử lý</p>
@break
@default
<p>Trạng thái: Không xác định</p>
@endswitch
⚠️ Lưu ý nhỏ: Đừng quên thêm
@breakở cuối mỗi@caseđể tránh việc chương trình "chạy tràn" (fall-through) sang các case tiếp theo giống như trong PHP thuần nhé!
💡 Mở rộng nhanh: Kiểm tra đăng nhập (@auth và @guest)
Vì Blade gắn liền với Laravel, nó tích hợp sẵn các chỉ thị kiểm tra phân quyền cực kỳ tiện lợi:
-
@auth: Chỉ hiển thị khi người dùng đã đăng nhập. -
@guest: Chỉ hiển thị khi người dùng chưa đăng nhập (khách).
HTML
@auth
<a href="/logout">Đăng xuất</a>
@endauth
@guest
<a href="/login">Đăng nhập ngay</a>
@endguest
Bạn đã nắm rõ cách dùng điều kiện chưa? Chúng ta cùng tiến tới Bài 3: Cấu trúc vòng lặp (@for, @foreach, biến $loop) nhé!
All Rights Reserved