+1

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 $products có dữ liệu, nó sẽ chạy bình thường. Nếu mảng rỗng (null hoặc []), nó sẽ tự động nhảy vào khối @empty mà 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ề true nếu đây là phần tử đầu tiên trong mảng.

  • $loop->last: Trả về true nế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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí