Blade template trong Laravel 8 chap 2

Trong bài trước chúng ta đã tìm hiểu về cách hiển thị dữ liệu trong Blade template rồi phải không nào còn bài này mình sẽ giới thiệu cho các bạn cách triển khai code logic trong blade template laravel 8 các bạn nhé.

1. if trong Blade template.

Với Laravel 8 trong  blade template chúng ta có thể triển khai câu lệnh if trong PHP với các directive @if, @else, @elseif@endif. Với ý nghĩa tương tự như đối với PHP thuần if, else, elseif, endif

Ví Dụ: 

@if (count($records) === 1)
    I have one record!
@elseif (count($records) > 1)
    I have multiple records!
@else
    I don't have any records!
@endif

Ngoài ra Blade template còn cung cấp thêm một số các directive rút gọn khác như:

@unless

Nếu logic trong unless trả về false thì code bên trong directive sẽ được thực thi. 

Ví Dụ:

@unless (Auth::check())
    You are not signed in.
@endunless

@isset

Kiểm tra một biến có tồn tại hay không. Logic tương tự if(isset()) trong PHP.

Ví Dụ:

@isset($records)
  // $records is defined and is not null...
@endisset

@empty

Kiểm tra xem một biến có tồn tại hoặc bằng null hay không. Logic tương tự if (empty()) trong PHP. 

Ví Dụ:

@empty($records)
    // $records is "empty"...
@endempty

@auth

Kiểm tra xem user đã logic hay chưa. Nếu user login rồi thì code bên trong cặp directive sẽ được thực thi.

Ví Dụ:

@auth
    // The user is authenticated...
@endauth

Nếu bạn cần xác thực theo guard khác thì bạn có thể truyền guard name và trong directive. 

Ví Dụ:: check auth theo guard admin.

@auth('admin')
    // The user is authenticated...
@endauth

@guest

Kiểm tra xem user đã logic hay chưa. Nếu user chưa login thì code bên trong cặp directive sẽ được thực thi.

Ví Dụ:

@guest
    // The user is not authenticated...
@endguest

Nếu bạn cần xác thực theo guard khác thì bạn có thể truyền guard name và trong directive. 

Ví Dụ: check guest theo guard admin.

@guest('admin')
    // The user is not authenticated...
@endguest

@production

Kiểm tra xem môi trường có phải production hay không. Nếu môi trường là production thì code bên trong cặp directive sẽ được thực thi.

Ví Dụ:

@production
    // Production specific content...
@endproduction

@env

Ngoài ra bạn có thể check env theo tên môi trường truyền vào. Nếu đúng code bên trong cặp directive sẽ được thực thi. 

Ví Dụ:

@env('staging')
    // The application is running in "staging"...
@endenv

@env(['staging', 'production'])
    // The application is running in "staging" or "production"...
@endenv

@hasSection

Kiểm tra xem trong template cha có tồn tại section nào đó hay không. Nếu có code bên trong cặp directive sẽ được thực thi. 

Ví Dụ:

@hasSection('navigation')
    <div class="pull-right">
        @yield('navigation')
    </div>

    <div class="clearfix"></div>
@endif

@sectionMissing

Đây là trường hợp ngược lại của @hasSection

Ví Dụ:

@sectionMissing('navigation')
    <div class="pull-right">
        @include('default-navigation')
    </div>
@endif

2. Switch trong Blade template.

Đối với câu lệnh switch chúng ta có thể sử dụng các directive @switch, @case, @break, @default@endswitch với ý nghĩa tương tự switch, case, break, defaultendswitch trong PHP.

Ví Dụ:

@switch($i)
    @case(1)
        First case...
        @break

    @case(2)
        Second case...
        @break

    @default
        Default case...
@endswitch

3. Vòng lặp trong Blade template.

Để sử dụng các vòng lặp trong blade các bạn chỉ cần thêm @ vào trước các câu lệnh, riêng đối với câu lệnh do-while thì Blade không hỗ trợ.

Ví Dụ: Các vòng lặp trong blade.

@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

@foreach ($users as $user)
    <p>This is user {{ $user->id }}</p>
@endforeach

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>No users</p>
@endforelse

@while (true)
    <p>I'm looping forever.</p>
@endwhile

Trong đó foresle sẽ kiểm tra nếu array cần lặp là một mảng trống thì logic trong cặp directive @empty@endforelse sẽ được thực thi. Trong vòng lặp trong Blade bạn cũng có thể sử dụng các directive @continue, @break tương ứng với continue, break trong PHP

Ví Dụ:

@foreach ($users as $user)
    @if ($user->type == 1)
        @continue
    @endif

    <li>{{ $user->name }}</li>

    @if ($user->number == 5)
        @break
    @endif
@endforeach

Trong quá trình biên dịch vòng lặp trong blade template, Laravel 8 có thực hiện thêm một biến $loop vào để các bạn có thể truy xuất các thông tin vòng lặp như lần lặp hiện tại, kiểm tra lần lặp cuối, lần lặp đầu tiên. 

Ví Dụ:

@foreach ($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif

    @if ($loop->last)
        This is the last iteration.
    @endif

    <p>This is user {{ $user->id }}</p>
@endforeach

Đối với trường hợp có nhiều vòng lặp lồng nhau các bạn có thể trỏ đến parent để lấy thông thi vòng lặp bên ngoài.

Ví Dụ:

@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach
@endforeach

Danh sách các thuộc tính trong object $loop.

PropertyDescription
$loop->indexLấy ra chỉ mục (index) của vòng lặp hiện tại, bắt đầu từ 0.
$loop->iterationLấy ra lần lặp thiện tại là lần lặp thứ mấy (bắt đầu từ 1).
$loop->remainingVòng lặp còn phải lặp thêm bao nhiêu lần nữa.
$loop->countLấy ra số lượng item của vòng lặp.
$loop->firstKiểm tra xem lần lặp hiện tại có phải lần lặp đầu tiên không.
$loop->lastKiểm tra xem lần lặp hiện tại có phải lần lặp cuối cùng không.
$loop->evenKiểm tra xem lần lặp này có phải chẵn không
$loop->oddKiểm tra xem lần lặp này có phải lẻ không
$loop->depthMức độ lồng của vòng lặp hiện tại.
$loop->parentTruy xuất đến thông tin của vòng lặp cha.


Lời kết:

Bài học này chỉ tập trung miêu tả code logic trong blade template laravel 8 vì vậy sẽ hơi nhức đầu tuy nhiên các bạn cần đọc qua để áp dụng thành thạo trong blade template nhé. Chúc các bạn học tốt!

Bình luận