Blade template là một công cụ giúp chúng ta xử lí cú pháp trong view một cách ngắn ngọn, logic. Không giống như các template khác trong PHP thì blade cho phép chúng ta sử dụng cả PHP thuần trong nó.
Tất cả các blade template sẽ được biên dịch về mã PHP thuần và cache lại nên về cơ bản sử dụng blade template cũng không làm cho ứng dụng của bạn chậm đi.
1. Hiển thị dữ liệu trong Blade template
Để sử dụng Blade template trong Laravel các bạn chỉ cần tạo view với đuôi file là .blade.php
, cách sử dụng giống view thông thường
File routes/web.php
Route::get('hello ', function () {
return view('hello', ['name' => '<span class="color:red;">John</span>']);
});
File resources/views/hello.blade.php
<p>Hello, {{ $name }}</p>
<p>Hello, {!! $name !!}</p>
<p>Hello, <?=$name?></p>
Kết quả
Cặp dấu {{}}
tượng trưng cho câu lệnh echo trong PHP kết hợp với hàm htmlspecialchars để phòng chống lỗi XSS attack. Tức là bạn sẽ không thể in ra mã HTML sử dụng cặp dấu {{}}
này được
Rendering JSON
Chúng ta có thể output một object sang json bằng php thuần vào js để xử lí. Tuy nhiên, thay vì bạn phải đánh máy cả một đoạn “<?php echo json_encode($array); ?>”, bạn đơn giản chỉ cần gọi @json($array) là đủ
<script>
var app = @json($array);
</script>
2. Blade và Javascript
Để Blade không compile
đoạn code nào đó thì bạn chỉ cần thêm ký tự @ vào đằng trước
File resources/views/hello.blade.php
Hello, @{{ $name }}
Kết quả khi chạy localhost:8000/hello
là Hello, {{ $name }}
Trong trường hợp bạn không muốn Blade biên dịch nhiều dòng code thì bạn có thể sử dụng @verbatim
directive
@verbatim
<div class="container">
Hello, {{ name }}.
</div>
@endverbatim
3. Comment trong Blade
Để comment trong Blade template các bạn sử dụng cặp dấu {-- content --}
với content là nội dung bạn muốn comment
4. if trong Blade template
Sử dụng @if
, @else
, @elseif
và @endif
với ý nghĩa tương tự như đối với PHP thuần if
, else
, elseif
, endif
@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 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
@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
@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
@empty($records)
// $records is "empty"...
@endempty
5. Authentication Directives
@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.
@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
@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
6. Environment Directives
@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
@production
// Production specific content...
@endproduction
@env
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
@env('staging')
// The application is running in "staging"...
@endenv
@env(['staging', 'production'])
// The application is running in "staging" or "production"...
@endenv
7. Section Directives
@hasSection
Kiểm tra xem trong template cha có tồn tại section nào không. Nếu có code bên trong cặp directive sẽ được thực thi
@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
@sectionMissing('navigation')
<div class="pull-right">
@include('default-navigation')
</div>
@endif
8. Switch trong Blade template
Đối với câu lệnh switch
các bạn có thể sử dụng các directive @switch
, @case
, @break
, @default
và @endswitch
với ý nghĩa tương tự switch
, case
, break
, default
và endswitch
trong PHP
@switch($i)
@case(1)
First case...
@break
@case(2)
Second case...
@break
@default
Default case...
@endswitch
9. 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ợ
@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
và @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
@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 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
@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
@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
.
Property | Description |
---|---|
$loop->index |
Lấy ra chỉ mục (index) của vòng lặp hiện tại, bắt đầu từ 0. |
$loop->iteration |
Lấy ra lần lặp thiện tại là lần lặp thứ mấy (bắt đầu từ 1). |
$loop->remaining |
Vòng lặp còn phải lặp thêm bao nhiêu lần nữa. |
$loop->count |
Lấy ra số lượng item của vòng lặp. |
$loop->first |
Kiểm tra xem lần lặp hiện tại có phải lần lặp đầu tiên không. |
$loop->last |
Kiể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->even |
Kiểm tra xem lần lặp này có phải chẵn không |
$loop->odd |
Kiểm tra xem lần lặp này có phải lẻ không |
$loop->depth |
Mức độ lồng của vòng lặp hiện tại. |
$loop->parent |
Truy xuất đến thông tin của vòng lặp cha. |
[…] Khi thực hiện validate data, nếu như không pass thì Laravel sẽ return về một MassageBag (IlluminateSupportMessageBag) chứa các error massage. Và Laravel sẽ tự động gán MassageBag vào trong $errors trong views […]
[…] dụ: Hiển thị data paginate trong Blade […]