Những tính năng Blade "nhỏ mà có võ" trong các bản Laravel mới

· 3 min read

Laravel liên tục bổ sung các bản cập nhật Blade qua mỗi thế hệ mới. Không chỉ giải quyết bài toán UI Components, các tiểu tiết Directive giúp code chúng ta "Clean" hơn rất nhiều.

1. Import Class bằng @use (Laravel 11)

Dành cho những lúc bạn cần gọi Enum hoặc một hằng số mà không muốn gõ đầy đủ Namespace dài dằng dặc.

@use('App\Enums\PostStatus')

@if ($post->status === PostStatus::PUBLISHED)
    <span class="text-green-500">Đã xuất bản</span>
@endif

Hoặc gắn Alias (Bí danh):

@use('App\Models\User', 'UserModel')

2. Quản lý trạng thái Element với @checked, @selected, @disabled

Trước đây, ta phải viết toán tử ba ngôi dài dòng:

<input type="checkbox" name="active" value="1" {{ $user->active ? 'checked' : '' }}>

Với Blade hiện đại:

<input type="checkbox" name="active" value="1" @checked(old('active', $user->active))>

<select name="role">
    <option value="admin" @selected($user->role == 'admin')>Admin</option>
    <option value="user" @selected($user->role == 'user')>User</option>
</select>

<button type="submit" @disabled($errors->isNotEmpty())>
    Gửi đi
</button>

3. Render một phần View với @fragment (Hot trend HTMX / Livewire)

Nhiều lập trình viên đang dùng các thư viện tối ưu hóa AJAX như HTMX hoặc Turbo. Laravel hộ trợ tính năng trả về vừa đủ một "mảnh" view cụ thể qua @fragment.

File view posts/index.blade.php:

<div>
    <h1>Danh sách bài viết</h1>

    @fragment('post-list')
        <ul>
            @foreach($posts as $post)
                <li>{{ $post->title }}</li>
            @endforeach
        </ul>
    @endfragment
</div>

Tại Controller, nếu có query từ AJAX/HTMX yêu cầu đúng List này thôi:

return view('posts.index', ['posts' => $posts])->fragment('post-list');

Kết quả trả về chỉ là phần tử bên trong @fragment('post-list') giúp siêu tiết kiệm băng thông.

4. Biến giả trong vòng lặp ($loop)

Trong 1 khối @foreach, luôn luôn tồn tại đối tượng $loop thần thánh:

@foreach ($users as $user)
    @if ($loop->first)
        Trưởng phòng: {{ $user->name }}
    @else
        Nhân viên: {{ $user->name }}
    @endif
    
    <span class="class-{{ $loop->even ? 'xam' : 'trang' }}">
        Lặp thứ: {{ $loop->iteration }}
    </span>
@endforeach

Các thuộc tính hay dùng: $loop->index (bắt đầu từ 0), $loop->iteration (bắt đầu từ 1), $loop->remaining, $loop->last.

Trên đây là các "Mẹo vặt" Blade giúp tăng tốc độ gõ phím và hạn chế mã nguồn trở thành ma trận.

Bình luận