Views trong Laravel

Tram Ho

Chào các bạn. Bài tiếp theo trong series về Laravel hôm nay tôi sẽ giới thiệu về View trong Laravel.

1. Creating & Rendering Views

Chúng ta có thể tạo một view bằng cách tạo một file có đuôi .blade.php trong folder resources/views. Phần mở rộng .blade.php sẽ thông báo cho Laravel là tệp có chứa Blade template (là view engine trong Laravel). Blade template chứa HTML và các lệnh Blade cho phép chúng ta dễ dàng lặp lại các giá trị, tạo ra các câu lệnh if, lặp qua dữ liệu, ….
Khi chúng ta đã tạo ra một view, chúng ta có thể trả lại nó từ trong một route hoặc một controller của Laravel bằng cách sử dụng global view helper:

Views cũng có thể được trả lại bằng View facade:

Đối số đầu tiền sẽ ứng với tên tệp chúng ta đã tạo trong resources/views. Đối số thứ hai là một mảng dữ liệu được cung cấp cho view. Như ví dụ trên chúng ta đang truyền biến name với value là James vào trong view greeting.

Nested View Directories

Views cũng có thể được lồng trong thư mục con của resources/views. Dấu “.” có thể được sử dụng để tham chiếu đến các các view nằm trong thư mục con của views. Ví dụ: nếu file view của bạn được lưu trữ tại resource/views/admin/profile.blade, bạn có thể trả lại nó từ trong route hoặc controller của Laravel như sau:

Determining If A View Exists

Nếu bạn các xác định một view có tồn tại hay không, bạn có thể sử dụng View facade và method exists để check sự tồn tại của view:

Passing Data To Views

Như bạn đã thấy ở các ví dụ trước bạn có thể chuyển một mảng các giá trị cho view:

Khi chuyền dữ liệu theo cách này, dữ liệu phải là một mảng với các cặp key/value. Sau khi cung cấp dữ liệu cho một chế độ xem, bạn có thể truy cập dữ liệu trong view bằng cách sử dụng <?php echo $name; ?>.
Để thay thế cho việc chuyền một mảng dữ liệu vào view bạn có thể chuyền từng phần riêng lẻ vào view bằng cách sử dụng method with

Sharing Data With All Views

Đôi khi bạn cần phải hiển thị data với tất cả các view của laravel. Bạn có thể làm điều này với method share của View facade. Bạn nên gọi method share trong method boot của service provide. Bạn có thể thêm vào class AppProvidersAppServiceProvider hoặc tạo một provider riêng để chứa chúng:

2. View Composers

Nếu bạn có một data mà bạn muốn liên kết với một view khi view đó được hiển thị, view composer có thể giúp bạn tổ chức logic đó vào một vị trí duy nhất. View composer sẽ hữu ích khi cùng một view của bạn được trả về bởi nhiều route hoặc controller và bạn luôn cần gửi một phần data cụ thể. Thông thường các view composer sẽ được đăng ký trong một trong các service provide của bạn. Trong ví dụ này tôi sẽ tạo một service provider ViewServiceProvider mới để chứa logic này:

Chúng ta sẽ sử dụng method composer của View facade để đăng ký view composer cho Laravel. Laravel sẽ không bao gồm thư mục mặc định cho các view composer vì vậy bạn có thể tự do sắp xếp chúng theo cách bạn muốn. Trong ví dụ trên tôi đang đặt nó nằm trong thư mục app/Http/View/Composers.
Bây giờ chúng ta sẽ đăng ký một view composer phương thức compose của lớp AppHttpViewComposersProfileComposer sẽ được thực thi mỗi khi hiển thị view profile. Ví dụ:

Attaching A Composer To Multiple Views

Bạn có thể đính kèm một view composer vào nhiều view một lúc bằng cách chuyển một mảng view làm đối số đầu tiên cho phương thức composer:

Phương thức composer cũng chấp nhận ký tự * làm ký tự đại diện, cho phép bạn đính kèm view composer vào tất cả các view:

3. Optimizing Views

Theo mặc định các Blade template view được biên dịch theo yêu cầu. Khi một request được thực hiện để yêu cầu hiển thị một view, Laravel sẽ xác định xem có tồn tại một phiên bản đã biên dịch của view hay không. Nếu tệp đã tồn tại, Laravel sẽ xác định xem view chưa biên dịch có được sửa đổi gần đây hơn so với view đã biên dịch hay không. Nếu view đã biên dịch không tồn tại hoặc view chưa được biên dịch đã được sửa đổi, Laravel sẽ biên dịch lại view.
Việc biên dịch các view trong quá trình request có thể ảnh hưởng nhỏ đến hiệu xuất. Vì vậy Laravel cung cấp lệnh view:cache Artisan để biên dịch trước tất cả các view được ứng dụng của bạn sử dụng. Để tăng hiệu suất, bạn có thể muốn chạy lệnh này như một phần của quá trình triển khai code của mình:

Bạn có thể sử dụng view:clear command để xóa toàn bộ cache của view:

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo