Tạo một Service Provider
Để dễ dàng quản lý tất cả custom directive của bạn, đầu tiên mình sẽ tạo BladeServiceProvider bằng cách:
php artisan make:provider BladeServiceProvider
Code language: CSS (css)
Câu lệnh trên tự động generate 1 file BladeServiceProvider.php
trong thư mục app/Providers
. Tiếp theo chúng ta sẽ tiến hành thêm service provider này vào trong vào trong providers trong file config/app.php
như sau:
'providers' => [
/*
* Laravel Framework Service Providers...
*/
App\Providers\BladeServiceProvider::class,
],
Code language: PHP (php)
Cách dùng
Để dễ hiểu hơn chúng ta sẽ làm một ví dụ đơn giản với BladeServiceProvider nhé. Hiển thị Hello {name}
name mình sẽ truyền từ ngoài vào. Chúng ta sẽ xử lý như sau:
public function boot()
{
Blade::directive('hello', function ($name) {
return "<?php echo 'Hello '. {$name}; ?>";
});
}
Code language: PHP (php)
Ở ngoài view các bạn chỉ cần gọi đến:
@hello('Taylor')
Code language: PHP (php)
Thử chạy xem kết quả nhé, nếu view không update được thì các bạn sẽ làm như sau: php artisan view:clear
Thêm một ví dụ phức tạp hơn nhé. View kiểm tra xem user đang đăng nhập có vai trò quản trị viên hay không các bạn thường dùng kiểu bên dưới, nếu dùng ở nhiều nơi thì khá dài, lặp code
@if (auth()->user()->role == 1)
is_admin
@else
is_member
@endif
Code language: PHP (php)
Thay vì sử dụng cách ở trên, bây giờ chúng ta sẽ tạo 1 custom directive admin
để kiểm tra việc ngày nhé:
public function boot()
{
Blade::directive('admin', function () {
return "<?php if(auth()->user()->role == 1) : ?>";
});
Blade::directive('endadmin', function () {
return "<?php endif; ?>";
});
}
Code language: PHP (php)
Ở ngoài view các bạn chỉ cần gọi đến:
@admin
is_admin
@else
is_member
@endadmin
Code language: PHP (php)
Kết luận
Mình đã hướng dẫn các bạn làm thế nào để tạo ra các custom blade directive trong laravel, các bạn có thể dễ dàng tạo ra các custom blade directive mà các bạn mong muốn!