Blade templete là gì?
- Blade là một
template engine
mạnh mẽ. Trong Laravel mặc định sử dụngBlade Template engine
Engine đểrender
view thành các nội dung filehtml
để trả về người dùng. - Các đặc tính của
Blade template
:- Blade không giới hạn chúng ta sử dụng code PHP trong views. Tức là chúng ta có thể tự do sử dụng cú pháp
<?php ?>
của PHP thuần trong views. - Tất cả các file Blade sẽ được dịch thành file code PHP và
cache
cho đến khi file Blade bị thay đổi. Các file cache view được lưu trữ trongapp\storage\views\{view_hash_id}.php
- Các file view dùng cho Blade có phần tên đuôi file là
.blade.php
. Ví dụ:gioithieu.blade.php
,lienhe.blade.php
, ... - Được lưu trong thư mục mặc định
resources/views
. Nếu muốn thay đổi đường dẫn mặc định, có thể hiệu chỉnh trong fileconfig/view.php
- Blade không giới hạn chúng ta sử dụng code PHP trong views. Tức là chúng ta có thể tự do sử dụng cú pháp
'paths' => [ resource_path('views'), // Đường dẫn đến thư mục `resources/views`, có thể tùy biến thành thư mục khác nếu bạn muốn! ],
Lưu đồ hoạt động của Blade Template engine
Sử dụng blade templete engine
trong laravel 5.x
Ví dụ sử dụng để học blade syntax
- Tạo ví dụ để bắt
route
được gởi từrequest GET
thông quaurl: http://127.0.0.1:8000/hello
- Xem lại bài: Thực hiện code theo mô hình MVC trong Laravel
1. Cú pháp xuất dữ liệu ra view
Cú pháp {{ $variable }}
[su_note]
Xuất giá trị (value)
của biến (variables)
với giá trị (value) được xuất ra với định dạng escape chuỗi HTML/JS
[/su_note]
- Để xuất
giá trị (value)
củabiến (variables)
, chúng ta sử dụng cú pháp{{
và}}
dùng để wrap những phần mà bạn muốn PHP xuất ra view. - Khi sử dụng
{{ }}
thì Blade tự động escape cho chúng ta.- Có nghĩa
{{ $variable }}
là tương đương với<?= htmlentities($variable) ?>
- Có nghĩa
$hoten = "<b>Dương Nguyễn Phú Cường</b>"; // View `hello.blade.php` // Xuất giá trị $hoten escapsed {{ $hoten }}
<!-- HTML được xuất ra (rendered) --> <b>Dương Nguyễn Phú Cường</b>
Cú pháp {!! $variable !!}
[su_note]
Xuất giá trị (value)
của biến (variables)
với giá trị (value) được xuất ra với định dạng không escape chuỗi HTML/JS
[/su_note]
- Để xuất
giá trị (value)
củabiến (variables)
, chúng ta sử dụng cú pháp{!!
và!!}
dùng để wrap những phần mà bạn muốn PHP xuất ra view. - Khi sử dụng
{!! $variable !!}
thì Blade không tự động escape cho chúng ta.- Có nghĩa
{{ $variable }}
là tương đương với<?= ($variable) ?>
- Có nghĩa
$hoten = "<b>Dương Nguyễn Phú Cường</b>"; // View `hello.blade.php` // Xuất giá trị $hoten không escapse {!! $hoten !!}
<!-- HTML được xuất ra (rendered) --> <b>Dương Nguyễn Phú Cường</b>
Cú pháp @{{ $variable }}
[su_note]
Blade
bỏ qua và output toàn bộ chuỗi
[/su_note]
- Để xuất toàn bộ chuỗi (bao gồm cả dấu ngoặc nhọn cú pháp của Blade), chúng ta sử dụng cú pháp
@{{
và}}
dùng để wrap những phần mà bạn muốn PHP xuất ra view.
$hoten = "<b>Dương Nguyễn Phú Cường</b>"; // View `hello.blade.php` // Yêu cầu blade bỏ qua và output toàn bộ chuỗi @{{ $hoten }}
<!-- sử dụng cú pháp @{{ }}, blade sẽ bỏ qua và output toàn bộ "{{ $hoten }}" --> @{{ $hoten }}
Cú pháp {{-- $variable --}}
[su_note]
Ghi chú trong Blade
[/su_note]
- Để ghi chú (comment) trong
Blade
, chúng ta sử dụng cú pháp{{-- --}}
$hoten = "<b>Dương Nguyễn Phú Cường</b>"; // View `hello.blade.php` {{-- $hoten, ghi chú khi sử dụng code, bla, bla, ... --}}
Các cấu trúc để điều khiển luồng (Control Structures)
Các cấu trúc điều khiển luồng của blade cũng tương tự như khi chúng ta dùng PHP thuần cũng bao gồm,if, else
, foreach
, while
…
Lệnh Điều kiện (Conditionals)
Blade cung cấp cho ta các cấu trúc điều kiện như bên dứoi@if :
@if
sẽ được compile thành <?php if ($condition) : ?>
.
<?php $gioitinh = 0; //0: Nam; 1: Nữ; 2: Không công bố ?> Giới tính là: @if ($gioitinh == 0) {{ 'Là Nam!' }} @elseif ($gioitinh == 1) {{ 'Là Nữ' }} @else {{ 'Không công bố' }} @endif
@unless
@unless
tương tự như @if
, và nó @unless ($condition)
sẽ tương đương với @if (!$condition)
@unless (Auth::check()) Vui lòng đăng nhập để thực hiện chức năng này... @endunless
Vòng lặp (Loops)
@for
, @foreach
, và @while
:
Tương đương với PHP thuần là for, foreach , while
@for ($i = 0; $i < 10; $i++) Giá trị hiện tại là {{ $i }} @endfor @foreach ($users as $user) <p>Đây là user tên {{ $user->fullname }}</p> @endforeach @while (true) <p>Vòng lập vô tận, lập mãi mãi...</p> @endwhile
Layout và kế thừa temaplate
Để tạo một ứng dụng web với nhiều trang khác nhau, chúng ta không nên lặp đi lặp lại cùng 1 đoạn code (DRY - Don't Repeat Yourself). Thay vào đó, chúng ta sẽ tạo một bố cục (layout) chính, dùng chung cho toàn trang web. Các view con (child view) sẽ kế thừa từ giao diện chủ. Ví dụ: chúng ta sẽ tạo bố cục (layout) chính như hình sau:View bố cục (layout) master
- Trong bố cục (layout) master, chúng ta sẽ
đục lỗ (chừa sẵn chỗ - placeholder)
, để các view con khi kế thừa layout master có thể gắn giao diện vào. - Để tiến hành
đục lỗ (chừa sẵn chỗ - placeholder)
, chúng ta sẽ sử dụng cú pháp@yield('placeholder_name')
củaBlade
để thực hiện - Code view bố cục (layout) master:
master.blade.php
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Sunshine | @yield('title')</title> </head> <body> <!-- Main content --> <div class="container-fluid"> <div class="row"> <!-- Content --> <main role="main" class="col-md-9 ml-sm-auto col-lg-10 px-4"> @yield('content') </main> <!-- End content --> </div> </div> <!-- End main content --> </body> </html>
Các thành phần được gắn vào layout (Sub view)
- Khi thiết kế bố cục (layout) cho một ứng dụng web. Thường sẽ có các thành phần cố định, chúng ta nên tách từ bố cục (layout) master chính ra thành các thành phần nhỏ hơn để dễ quản lý.
- File view
layout/partials/navbar.blade.php
: sẽ quy định giao diện về thanh điều hướng navbar - File view
layout/partials/sidebar.blade.php
: sẽ quy định giao diện về thanh bên cạnh sidebar - Để nhúng các thành phần vào bố cục master, sử dụng cú pháp
@include('duong_dan_den_file_view_can_include')
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Sunshine | @yield('title')</title> </head> <body> <!-- Navbar --> @include('layouts.partials.navbar') <!-- End Navbar --> <!-- Main content --> <div class="container-fluid"> <div class="row"> <!-- Sidebar --> @include('layouts.partials.sidebar') <!-- End sidebar --> <!-- Content --> <main role="main" class="col-md-9 ml-sm-auto col-lg-10 px-4"> @yield('content') </main> <!-- End content --> </div> </div> <!-- End main content --> </body> </html>
View con (child view)
- View con sẽ kế thừa view bố cục (layout) master. Sử dụng cú pháp
@extends('ten_view_cha')
- View con muốn gắn phần giao diện vào các chỗ đã đục lỗ sẵn trên view cha. Sử dụng cú pháp
@section('placeholder_name') ... @endsection
@extends('layouts.master') @section('title') Trang quản trị hệ thống @endsection @section('content') <h1>Hello, đây là nội dung từ view con (child view) được nhúng vào `section('content')`</h1> @endsection
Mục lục
Chương trình học
- Bức tranh Tổng thể về Lập trình WEB
-
Giới thiệu, cài đặt, cấu hình môi trường lập trình
9
- Cài đặt web server XAMPP #84
- Cài đặt công cụ truy vấn database HeidiSQL #85
- Cài đặt Composer để quản lý các gói thư viện trong PHP #86
- Cài đặt trình soạn thảo code Visual Studio Code IDE #64
- Tạo tên miền ảo trên máy cục bộ (virtual host on localhost) bằng XAMPP #107
- Cài đặt nền tảng quản lý Source Code sử dụng GIT #1030
- Cài đặt công cụ quản lý Source Code TortoiseGit #1045
- Cài đặt chế độ Debug PHP với Visual Studio Code #8066
- Tạo chứng chỉ SSL trên Localhost #10399
- Tập làm quen với quản lý source code bằng GitHub 3
- Cài đặt framework Laravel 1
- Tìm hiểu mô hình kiến trúc MVC vận hành trong framework Laravel 4
- Sử dụng Template Engine để trình diễn nội dung trong các VIEW 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế CSDL
7
- Phân tích các yêu cầu, nghiệp vụ của khách hàng #68
- Mô hình thiết kế CSDL mẫu Sunshine #69
- Khởi tạo database sunshine, thiết lập kết nối CSDL trong Laravel #1143
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục phẳng #70
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục có liên kết khóa ngoại #1157
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục phẳng #71
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục có liên kết khóa ngoại #7851
- Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Ánh xạ CSDL và Laravel 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Backend
20
- Thiết kế bố cục (layouts) cho giao diện Backend #72
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (index) #135
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (create) #137
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (edit) #138
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (delete) #139
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Index #75
- Lưu đồ Upload file từ Client lên Server #2229
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Create #108
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Edit #87
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Delete #88
- Xây dựng danh mục Sản phẩm có chức năng upload nhiều Hình ảnh cùng lúc #9259
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Bổ sung menu vào sidebar #104
- Xây dựng chức năng xuất biểu mẫu và In ấn trực tiếp trên web #78
- Xây dựng chức năng xuất Excel #76
- Xây dựng chức năng xuất PDF #77
- Tạo chức năng Đăng nhập #1870
- Lưu đồ Kiểm tra ràng buộc dữ liệu (Validation) #2205
- Kiểm tra ràng buộc dữ liệu (Validation) phía Client #2206
- Kiểm tra ràng buộc dữ liệu (Validation) phía Server #2207
- Bài tập tổng hợp - Tạo các chức năng Backend cho trang web đọc Truyện Tranh và Tiểu Thuyết Online sử dụng Laravel framework #9312
-
AngularJS
7
- AngularJS là gì? Cài đặt AngularJS và cú pháp sử dụng AngularJS #95
- Cách mô hình kiến trúc MVC vận hành trong AngularJS #96
- Cách sử dụng AngularJS Controller, Scope #98
- Cách sử dụng AngularJS Directive #97
- Cách sử dụng AngularJS Event #100
- Cách sử dụng AngularJS Filter #99
- Cách sử dụng AngularJS Validation #101
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Frontend sử dụng AngularJS
11
- Thiết kế bố cục (layouts) cho giao diện Frontend #80
- Tích hợp AngularJS vào framework Laravel #102
- Tạo giao diện trang chủ (index) #81
- Tạo giao diện trang Giới thiệu (about) #109
- Tạo giao diện trang Liên hệ (contact) #114
- Tạo trang danh sách Sản phẩm (product) #110
- Tạo nút Thêm vào giỏ hàng cho từng sản phẩm (add-to-cart) #112
- Tạo trang Chi tiết Sản phẩm (product-detail) #111
- Tạo giỏ hàng (cart sidebar) #82
- Tạo trang thanh toán (checkout) #83
- Tạo đơn hàng và gởi mail xác nhận #103
-
Bonus
9
- Đa ngôn ngữ trong Laravel #115
- Tạo báo cáo với biểu đồ ChartJS #116
- Tạo khung chọn Ngày tháng cho dự án #2431
- Tạo các trang thông báo lỗi tương ứng STATUS CODE #117
- Kiểm tra ứng dụng với tunnel ảo NGROK #2418
- Phân trang trong Laravel #2436
- Bổ sung khung xem Hình ảnh trước khi upload (preview image upload) #2439
- Tạo API trong Laravel và sử dụng AngularJS để hiển thị giao diện #9385
- Cách tự động sinh Ảnh nhiều kích cỡ (Automatic resize image) khi upload file Ảnh #9970
- Danh sách Đồ án xây dựng trang web sử dụng LARAVEL 2
- Tài liệu tham khảo 3
- Thực hiện Đồ án 1
Các bài học
Bài học trước Bài học tiếp theo
Chương trình học
Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...Chương trình học
- Bức tranh Tổng thể về Lập trình WEB
-
Giới thiệu, cài đặt, cấu hình môi trường lập trình
9
- Cài đặt web server XAMPP #84
- Cài đặt công cụ truy vấn database HeidiSQL #85
- Cài đặt Composer để quản lý các gói thư viện trong PHP #86
- Cài đặt trình soạn thảo code Visual Studio Code IDE #64
- Tạo tên miền ảo trên máy cục bộ (virtual host on localhost) bằng XAMPP #107
- Cài đặt nền tảng quản lý Source Code sử dụng GIT #1030
- Cài đặt công cụ quản lý Source Code TortoiseGit #1045
- Cài đặt chế độ Debug PHP với Visual Studio Code #8066
- Tạo chứng chỉ SSL trên Localhost #10399
- Tập làm quen với quản lý source code bằng GitHub 3
- Cài đặt framework Laravel 1
- Tìm hiểu mô hình kiến trúc MVC vận hành trong framework Laravel 4
- Sử dụng Template Engine để trình diễn nội dung trong các VIEW 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế CSDL
7
- Phân tích các yêu cầu, nghiệp vụ của khách hàng #68
- Mô hình thiết kế CSDL mẫu Sunshine #69
- Khởi tạo database sunshine, thiết lập kết nối CSDL trong Laravel #1143
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục phẳng #70
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục có liên kết khóa ngoại #1157
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục phẳng #71
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục có liên kết khóa ngoại #7851
- Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Ánh xạ CSDL và Laravel 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Backend
20
- Thiết kế bố cục (layouts) cho giao diện Backend #72
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (index) #135
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (create) #137
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (edit) #138
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (delete) #139
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Index #75
- Lưu đồ Upload file từ Client lên Server #2229
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Create #108
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Edit #87
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Delete #88
- Xây dựng danh mục Sản phẩm có chức năng upload nhiều Hình ảnh cùng lúc #9259
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Bổ sung menu vào sidebar #104
- Xây dựng chức năng xuất biểu mẫu và In ấn trực tiếp trên web #78
- Xây dựng chức năng xuất Excel #76
- Xây dựng chức năng xuất PDF #77
- Tạo chức năng Đăng nhập #1870
- Lưu đồ Kiểm tra ràng buộc dữ liệu (Validation) #2205
- Kiểm tra ràng buộc dữ liệu (Validation) phía Client #2206
- Kiểm tra ràng buộc dữ liệu (Validation) phía Server #2207
- Bài tập tổng hợp - Tạo các chức năng Backend cho trang web đọc Truyện Tranh và Tiểu Thuyết Online sử dụng Laravel framework #9312
-
AngularJS
7
- AngularJS là gì? Cài đặt AngularJS và cú pháp sử dụng AngularJS #95
- Cách mô hình kiến trúc MVC vận hành trong AngularJS #96
- Cách sử dụng AngularJS Controller, Scope #98
- Cách sử dụng AngularJS Directive #97
- Cách sử dụng AngularJS Event #100
- Cách sử dụng AngularJS Filter #99
- Cách sử dụng AngularJS Validation #101
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Frontend sử dụng AngularJS
11
- Thiết kế bố cục (layouts) cho giao diện Frontend #80
- Tích hợp AngularJS vào framework Laravel #102
- Tạo giao diện trang chủ (index) #81
- Tạo giao diện trang Giới thiệu (about) #109
- Tạo giao diện trang Liên hệ (contact) #114
- Tạo trang danh sách Sản phẩm (product) #110
- Tạo nút Thêm vào giỏ hàng cho từng sản phẩm (add-to-cart) #112
- Tạo trang Chi tiết Sản phẩm (product-detail) #111
- Tạo giỏ hàng (cart sidebar) #82
- Tạo trang thanh toán (checkout) #83
- Tạo đơn hàng và gởi mail xác nhận #103
-
Bonus
9
- Đa ngôn ngữ trong Laravel #115
- Tạo báo cáo với biểu đồ ChartJS #116
- Tạo khung chọn Ngày tháng cho dự án #2431
- Tạo các trang thông báo lỗi tương ứng STATUS CODE #117
- Kiểm tra ứng dụng với tunnel ảo NGROK #2418
- Phân trang trong Laravel #2436
- Bổ sung khung xem Hình ảnh trước khi upload (preview image upload) #2439
- Tạo API trong Laravel và sử dụng AngularJS để hiển thị giao diện #9385
- Cách tự động sinh Ảnh nhiều kích cỡ (Automatic resize image) khi upload file Ảnh #9970
- Danh sách Đồ án xây dựng trang web sử dụng LARAVEL 2
- Tài liệu tham khảo 3
- Thực hiện Đồ án 1
Bài học trước Bài học tiếp theo