Bài 3: Cấu trúc vòng lặp và biến $loop đặc biệt trong Blade
Chào bạn đến với Bài 3! Khi làm việc với dữ liệu thực tế, bạn sẽ thường xuyên phải hiển thị danh sách (như danh sách sản phẩm, danh sách bài viết, bảng dữ liệu người dùng). Blade cung cấp các chỉ thị vòng lặp cực kỳ thông minh giúp mã nguồn gọn gàng hơn nhiều so với PHP thuần.
1. Vòng lặp truyền thống: @for, @endif và @while
Nếu bạn cần lặp lại một khối code dựa trên số lần đếm cụ thể, @for và @while là lựa chọn quen thuộc:
HTML
<!-- Vòng lặp @for -->
@for ($i = 1; $i <= 5; $i++)
<p>Số thứ tự: {{ $i }}</p>
@endfor
<!-- Vòng lặp @while -->
@php $j = 1; @endphp
@while ($j <= 3)
<p>Giá trị hiện tại: {{ $j }}</p>
@php $j++; @endphp
@endwhile
2. Vòng lặp phổ biến nhất: @foreach
Khi làm việc với mảng (array) hoặc Collection dữ liệu từ Database gửi sang, @foreach là công cụ bạn dùng nhiều nhất:
HTML
<ul>
@foreach ($users as $user)
<li>{{ $user->name }}</li>
@endforeach
</ul>
3. Cứu tinh khi mảng rỗng: @foreachelse
Trong PHP thuần, khi dùng foreach, nếu mảng rỗng, bạn thường phải viết thêm một câu lệnh if kiểm tra trước bên ngoài. Nhưng Blade đã tích hợp sẵn @foreachelse cực kỳ tiện lợi:
HTML
<ul>
@foreachelse ($products as $product)
<li>{{ $product->name }} - Giá: {{ $product->price }}đ</li>
@empty
<li>Hiện tại không có sản phẩm nào trong danh mục này.</li>
@endforeachelse
</ul>
✨ Nếu mảng
$productscó dữ liệu, nó sẽ chạy bình thường. Nếu mảng rỗng (nullhoặc[]), nó sẽ tự động nhảy vào khối@emptymà không cần bạn phải viết thêm câu lệnh kiểm tra nào khác!
4. Biến ma thuật $loop trong vòng lặp
Khi bạn sử dụng @foreach (hoặc @foreachelse), Laravel tự động tạo sẵn cho bạn một biến đặc biệt tên là $loop. Biến này chứa rất nhiều thông tin hữu ích về vòng lặp hiện tại mà bạn không cần phải tự định nghĩa biến đếm thủ công:
-
$loop->iteration: Số thứ tự của lần lặp hiện tại (bắt đầu từ1). -
$loop->index: Chỉ số của lần lặp hiện tại (bắt đầu từ0). -
$loop->first: Trả vềtruenếu đây là phần tử đầu tiên trong mảng. -
$loop->last: Trả vềtruenếu đây là phần tử cuối cùng trong mảng. -
$loop->count: Tổng số phần tử trong mảng đang lặp. -
$loop->depth: Độ sâu của vòng lặp (dùng trong trường hợp lồng nhau - nested loops).
Ví dụ ứng dụng thực tế với $loop:
HTML
<ul>
@foreach ($users as $user)
{{-- Thêm class 'highlight' nếu là người dùng đầu tiên --}}
<li @if($loop->first) class="highlight" @endif>
{{ $loop->iteration }}. {{ $user->name }}
@if($loop->last) (Đây là người cuối cùng) @endif
</li>
@endforeach
</ul>
Tuyệt vời! Bạn đã hoàn thành toàn bộ Phần 1 (Cơ bản về Blade).
Bây giờ chúng ta sẽ chuyển sang Phần 2: Layout và Kế thừa (Layout & Inheritance) với Bài 4: Kế thừa giao diện với @extends, @section, @yield. Bạn đã sẵn sàng chưa?
All rights reserved