Laravel 04: Blade directives

Trong bài trước, tôi đã giới thiệu sơ lược về cách output một biến vào giao diện Blade cùng một số directives “cái tên nói lên tất cả”. Trong bài này, tôi sẽ giới thiệu một số directives khác mà bạn cần nên chú ý.

@json

Tất nhiên, 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à đủ. Ngắn gọn hơn nhiều phải không?

Ngoài ra, nếu bạn kết hợp với Vue ở front end thì @json sẽ là lựa chọn cực tốt:

@isset và @empty

@isset hoạt động tương tự như isset, đúng hơn là sự kết hợp giữa if và isset. Trong khi đó, @empty hoạt động theo chiều hướng ngược lại. Chẳng hạn:

@auth và @guest

Blade cung cấp cho chúng ta một @auth directive để thuận tiện kiểm tra authentication. Trong khi đó, @guest sẽ xử lí trường hợp guest. Cách sử dụng cũng tương tự các directive phía trên:

@php

Thay vì bạn viết php code trong cặp tag <?php ?>, bạn nên đặt phần code trong cặp @php directive, vừa đẹp, vừa phù hợp với phong cách của template.

$loop

$loop không phải là một directive. Như bạn thấy, nó là một biến (variable) trỏ tới chính vòng lặp chứa nó. Như vậy, nó chỉ được sử dụng trong vòng lặp mà thôi. Trước khi nói tiếp, tôi nhắc lại kiến thức về vòng lặp và các directives liên quan:

Bây giờ, chúng ta sẽ tập trung vào @foreach. $loop sẽ trỏ tới chính vòng lặp đang bao bọc nó (parent loop), và qua đó, chúng ta sẽ truy cập một số tính chất của vòng lặp thông qua các properties và methods của $loop. Chẳng hạn:

Nếu có nhiều vòng lặp trùng nhau, ta có thể truy cập được vòng lặp bên ngoài qua $loop->parent.

Bạn có thể đọc thêm về tổng hợp các props của $loop ở bảng bên dưới:

$loop->index Vị trí hiện tại của phần tử đang được duyệt, bắt đầu từ 0.
$loop->iteration Truy cập mảng của vòng lặp, bắt đầu từ 1.
$loop->remaining Các phần tử còn lại của mảng đang chạy vòng lặp.
$loop->count Tổng số phần tử.
$loop->first Trả về true nếu đây là phần tử đầu tiên của vòng lặp.
$loop->last Trả về true nếu đây là phần tử cuối cùng của vòng lặp.
$loop->even Trả về true nếu đây là phần tử có vị trí chẵn của vòng lặp.
$loop->odd Trả về true nếu đây là phần tử có vị trí lẻ của vòng lặp.
$loop->depth Truy cập vào vòng lặp bên trong vòng lặp hiện tại (nếu có).
$loop->parent Truy cập vào vòng lặp bên ngoài vòng lặp hiện tại (nếu có).

@verbatim

Trong bài trước, tôi có nói sơ lược về cách “thỏa hiệp” giữa Laravel và Angular. Để Laravel nhường quyền kiểm soát cho Angular, tức là chúng ta nói với Laravel “biến này là của Angular, không phải là biến của Laravel”, chúng ta chỉ việc thêm dấu @ trước cặp dấu nhọn. Tức là @{{ angularVarName }}. Tuy nhiên, giả sử chúng ta có một đoạn code khá dài với vài chục biến của Angular, hoặc của JS framework khác, thì việc thêm một số lượng tương ứng các dấu @ sẽ không có hiệu quả, và thậm chí bạn có thể bỏ quên, bỏ sót đâu đó, và gây cho bạn cảm giác tức điên. May mắn thay, Laravel “chơi đẹp” với các JS frameworks. Bạn chỉ cần đặt đoạn code đó trong cặp @verbatim directive là xong. Chẳng hạn, với Angular:

Đến đây, tôi kết thúc bài học. Tuy nhiên, chúng ta vẫn còn một số directives quan trọng nữa, và chúng sẽ được giới thiệu trong bài học sau.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.