+2

12 Directives có thể bạn hay dùng trong Laravel Blade

Như các bạn đã biết Laravel Blade là một công cụ để thể hiện view trong Laravel, hay nói cách khác nôm na khi chạy lên chương trình thì nó sẽ như một file HTML vậy. Chúng được tạo bởi các file có đuôi là .blade.php và nằm trong thư mục resource/views của framework Laravel. Và hôm nay mình sẽ giới thiệu 12 Directives mà bạn sẽ có thể hay phải dùng tới khi làm việc với Laravel Blade nhé, bắt đầu nào 😄

@include

Đầu tiên là phải kể đến @include một Directive hay dùng nhất khi chúng ta làm việc với view blade, nó cho phép đưa một view ở một file blade khác vào view này của bạn. Ví dụ một trang có 3 phần cơ bản là header.blade.php, content.blade.php, footer.blade.php thì ở trong file content.blade.php ta có thể include phần view header và footer như sau:

@include('header')

    <body>
        // your content
    </body>

@inlcude('footer')

Hoặc bạn cũng có thể truyền kèm theo một mảng dữ liệu qua view như sau:

@include ( 'partials.sidebar' , [ 'menu' => $menu])

@push and @stack

Laravel Blade cho phép xác định một trình giữ chỗ được gọi stack và sau đó đẩy các giá trị sang stack đó. Điều này có thể rất hữu ích để gọi một hoặc nhiều file javascript theo yêu cầu của từng trang view khác nhau.

@push('scripts')
    <script src="/example.js"></script>
@endpush
<head>
    <!-- Head Contents -->

    @stack('scripts')
</head>

@php

Đối với các mã PHP thì Blade cho phép sử dụng trong View của Laravel, chúng ta chỉ cần mở mã PHP bằng các @php và đóng lại khối mã PHP đó bằng @endphp là ok, đơn giản phải không ✌️

@php
 // code php here
@endphp

@hasSection

Khi tạo bố cục phức tạp trong Laravel Blade, bạn có thể kiểm tra xem một phần có nội dung bằng cách sử dụng @hasSection để thực hiện việc kiểm tra này.

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

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

@each

@each của Laravel Blade cho phép bạn kết hợp vòng lặp và đưa vào một dòng. Ví dụ:

@each('view.name', $jobs, 'job')

Trong đó, view.name là phần view sẽ hiển thị cho từng phần của $job, còn $job sẽ là biến dùng để lặp để gán từng phần vào biến job. Ngoài ra bạn cũng có thể truyền đối số thứ tư để hiển thị view nếu đối tượng hoặc mảng đó rỗng

@each('view.name', $jobs, 'job', 'view.empty')

@includeWhen

@includeWhen là phần mở rộng của @include. Lệnh này sẽ bao gồm một view nếu điều kiện đã cho là đúng.

@includeWhen ($ isUserAdmin, 'users.admin_card' , [ 'user' => $ user])

Trong ví dụ trên thì @includeWhen() sẽ kiểm tra giá trị của biến $isUserAdmin và nếu biến đó đúng, nó sẽ bao gồm cả view của riêng quản trị viên là users.admin_card.

@json

Đôi khi bạn có thể chuyển một mảng vào view của mình với ý định hiển thị nó dưới dạng JSON để khởi tạo một biến JavaScript. Ví dụ:

<script>
    var app = <?php echo json_encode($array); ?>;
</script>

Tuy nhiên, thay vì gọi thủ công json_encode, bạn có thể sử dụng lệnh @json của Blade. Lệnh này chấp nhận các đối số tương tự như json_encode của PHP

<script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
</script>

@forelse

Ví dụ giờ bạn phải hiển thị hết tên của một danh sách người dùng thì bạn chỉ việc dùng @foreach để lặp đúng không? Nhưng nếu thêm yêu cầu là phải kiểm tra xem danh sách đó có dữ liệu hay chưa thì bạn lại thêm câu điều kiện @if vào như sau:

@if($users->count() > 0)
	@foreach($users as $user)
		{{ $user->name }}
	@endforeach
@else
	No Users Found	
@endif

Tuy nhiên, trong Laravel Blade @forelse sẽ làm code của bạn gọn gàng hơn rất nhiều đó 😃))

@forelse($users as $user)
	{{ $user->name }}
@empty
	No Users Found
@endforelse

// đơn giản và clear hơn rất nhiều đúng không :P

@verbatim

Nếu bạn đang hiển thị các biến JavaScript trong một phần lớn của view, bạn có thể gói HTML trong @verbatim để bạn không phải đặt tiền tố cho mỗi câu lệnh echo Blade bằng một ký hiệu @ nữa

@verbatim
    <div class="container">
        Hello, {{ name }}.
    </div>
@endverbatim

@isset and @empty

Thông thường trong PHP chúng ta sử dụng hàm isset()empty() để kiểm tra xem giá trị của biến có trống hay không thì trong Laravel Blade sẽ cung cấp @isset()@empty() để thay thế mã PHP thông thường.

@if(isset($users))
// your logic here
@endif

@if(empty($users))
// your logic here
@endif

Trong Blade sẽ thành như sau:

@isset($users)
// your logic here
@endisset

@empty($users)
// your logic here
@endempty

@inject

@inject được sử dụng để truy xuất từ Service Container của Laravel và đưa vào view của bạn.

Đối số đầu tiên được truyền cho @inject này là một tên biến mà service sẽ được đặt vào, trong khi đối số thứ hai là Service mà bạn muốn gọi đến.

@inject('menu', 'App\Services\MenuService')

// then in your view

{!! $menu->render() !!}

@csrf and @method

Khi bạn tạo Form trong Blade thì cần dùng @csrf để khai báo trường CSRF ẩn dùng để xác thực yêu cầu.

<form method="POST" action="/profile">
    @csrf

    ...
</form>

Bên cạnh đó thì từ khi HTML không hỗ trợ các method PUT, PATCH và DELETE thì trong Blade bạn sẽ cần phải thêm một method ẩn _method để spoof những động từ HTTP. Lệnh @method trong Blade có thể tạo trường này cho bạn:

<form action="/foo/bar" method="POST">
    @method('PUT')

    ...
</form>

Trên đây 12 Directives trong số rất nhiều Directives khác của Laravel Blade mà mình đề cập tới, mong qua bài này sẽ giúp được cho các bạn ít nhiều khi làm project của mình. Cảm ơn các bạn đã đọc bài, xin chào và hẹn gặp lại! 😁😘

Tài liệu tham khảo

https://laravel.com/docs/5.8/blade

https://medium.com/search?q=laravel blade


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.