Laravel Tutorial

Bài 9: Blade Template trong Laravel – Phần 3

Tiếp tục về blade template trong Laravel, phần này chúng ta sẽ tìm hiểu về stack, injection, tạo directive và cache view trong Blade template

# Stack trong Blade template

Blade template cung cấp cho chúng ta directive @push để thực thi việc đẩy các data vào @stack trong view

File resources/views/layouts/app.blade.php

<html>
   <head>
      <title>App Name</title>
   </head>
   <body> 
   <div class="container">
      @stack('content')
   </div>
</body>
</html>

File resources/views/home.blade.php

@extends('layouts.app')

@push('content', 'Hello!')

@push('content')
<p>Hello again!</p>
@endpush

File routes/web.php

Route::get('home', function () { 
   return view('home');
})->name('home');

Kết quả

Muốn đẩy ngược nội dung lên phía trên thì có thể sử dụng @prepend directive thay cho @push

File resources/views/home.blade.php

@extends('layouts.app')

@push('content', 'Hello!')

@push('content')
<p>Hello again!</p>
@endpush

@prepend('content')
<p>Goodbye!</p>
@endprepend

@prepend('content')
<p>See you again!</p>
@endprepend

Kết quả

# Tạo directive trong Blade

Trong một số trường hợp bạn muốn tạo thêm directive của riêng mình thì Laravel cũng hỗ trợ bạn tạo mới directive một cách hết sức đơn giản với cú pháp như sau:

use Illuminate\Support\Facades\Blade;
Blade::directive($directiveName, function ($value) {
   // Code here
});

Trong đó:

  • $directiveName là tên directive mà bạn muốn tạo.
  • $value là giá trị mà bạn truyền vào khi sử dụng directive.

Lưu ý: Để việc tạo mới directive hoạt động tốt nhất có thể thì bạn nên đưa code vào trong provider

Ví dụ: Tạo mới direcive in ra date với format “d-m-y h:i

File app/Providers/AppServiceProvider.php

Blade::directive('datetime', function($expression) {
   return "<?php echo ($expression)->format('d:m:y h:i'); ?>";
});

File resources/views/home.blade.php

@datetime(now())

File routes/web.php

Route::get('home', function () { 
   return view('home');
})->name('home');

Kết quả

 

# Cache view trong Laravel

Mặc định, Laravel luôn luôn cache lại các bản view đã được compile vào trong storage/framework/views sau đó mỗi request gọi đến laravel sẽ kiểm tra xem cache đó đã tồn tại hoặc hết hạn hay chưa? Nếu cache đã hết hạn (thời gian thay đổi file blade lớn hơn với thời gian thay đổi file cache) hoặc file cache chưa tồn tại thì laravel sẽ thực hiện việc compile blade vào cache lại.

Quá trình compile này có thể làm cho ứng dụng của bạn chậm đi một chút (có thể không đáng kể). Chính vì điều này laravel có cung cấp cho chúng ta 2 command để cache và clear cache view trong một số trường hợp cần thiết.

Cache: php artisan view:cache

Clear cache: php artisan view:clear

Leave a Comment