Công nghệ thông tin đã giúp phát triển, tạo ra những trang web có tính tương tác với người dùng, giúp người dùng dễ dàng sử dụng và quản lý ví dụ như các kênh mua bán online, đặt vé máy
Trang 1LỜI CẢM ƠN
Sau một thời gian học tập, nghiên cứu và triển khai đề tài: “Xây dựng hệ thống đặt vé xe khách giường nằm”, đến nay chúng tôi đã hoàn thành xong đề tài nghiên cứu của mình
Chúng tôi xin bày tỏ tấm lòng biết ơn sâu sắc nhất tới thầy giáo – Thạc sỹ Nguyễn Duy Hiếu đã trực tiếp hướng dẫn, giúp đỡ chúng tôi trong suốt quá trình chúng tôi thực hiện đề tài nghiên cứu khoa học này
Đồng thời chúng tôi cũng chân thành cảm ơn tới lãnh đạo Nhà trường, Ban chủ nhiệm Khoa cùng các thầy cô giáo đã giúp đỡ, tạo điều kiện để chúng tôi có
cơ hội nghiên cứu, học tập và hoàn thành đề tài nghiên cứu khoa học này
Tuy nhiên điều kiện về trình độ chuyên môn và thời gian thực hiện đề tài còn hạn chế nên đề tài của chúng tôi không tránh khỏi những thiếu sót, chúng tôi rất mong nhận được sự góp ý của thầy cô để có thể hoàn thành tốt đề tài nghiên cứu này
Chúng tôi xin chân thành cảm ơn!
Sơn La, tháng 5 năm 2018
Sinh viên
Nguyễn Văn Thương Hồ Đức Anh Vũ Thế Anh Tống Ngọc Anh Lò Văn Công
Trang 2MỤC LỤC
PHẦN MỞ ĐẦU 1
1 Lý do chọn đề tài 1
2 Mục đích nghiên cứu 1
3 Đối tượng nghiên cứu 1
4 Phạm vi nghiên cứu 1
5 Phương pháp nghiên cứu 1
6 Bố cục đề tài 2
CHƯƠNG 1: TỔNG QUAN VỀ THIẾT KẾ WEB 3
1.1 Lịch sử hình thành của thiết kế web 3
1.2 Xu hướng phát triển của thiết kế web 5
1.2.1 Mobile-first 5
1.2.2 Thiết kế website tương thích với mọi kích thước của thiết bị 5
1.2.3 Sử dụng các framework của CSS và JavaScript 6
1.3 Căn bản về HTML 6
1.3.1 HTML là gì? 6
1.3.2 Tập tin HTML là gì? 7
1.3.3 Thẻ trong HTML 7
1.3.4 Cấu trúc của một tài liệu HTML 7
1.3.5 Các phiên bản HTML 7
1.4 Căn bản về CSS 8
1.4.1 CSS là gì? 8
1.4.2 Lịch sử CSS 8
1.4.3 Lợi thế của CSS 8
1.5 Căn bản về JavaScript 9
1.5.1 JavaScript là gì? 9
1.5.2 Các lợi thế của JavaScript 9
1.5.3 Hạn chế của JavaScript 10
CHƯƠNG 2: TÌM HIỂU VỀ LARAVEL 11
Trang 32.1.1 Giới thiệu về Laravel 11
2.1.2 Các tính năng cơ bản của Laravel 11
2.1.3 Lịch sử phát triển của Laravel 12
2.2 Mô hình MVC 13
2.2.1 Giới thiệu về mô hình MVC 13
2.2.2 Các thành phần của mô hình MVC 14
2.2.3 Quy trình hoạt động mô hình MVC trong website 15
2.3 Các thành phần của Laravel (phiên bản 5.4 trở lên) 16
2.3.1 Router 16
2.3.2 Tham số của Router 17
2.3.3 Tên Router 18
2.3.4 Nhóm Router 18
2.3.5 Route Model Binding 19
2.3.6 Form Method Spoofing 20
2.3.7 Truy cập vào tuyến hiện tại 20
2.4 Middleware 21
2.4.1 Xác định Middleware 21
2.4.2 Đăng ký Middleware 21
2.4.3 Tham số Middleware 22
2.4.4 Phần mềm trung gian có thể chạy được 22
2.5 Controllers (Bộ điều khiển) 22
2.5.1 Bộ điều khiển cơ bản 22
2.5.2 Điều khiển Middleware 23
2.5.3 Bộ điều khiển tài nguyên 23
2.5.4 Phụ thuộc Injection và Controllers 25
2.5.5 Lọc đường đi 26
2.6 Blade Templates 26
2.6.1 Kế thừa mẫu 26
2.6.2 Hiển thị dữ liệu 27
Trang 42.6.4 Including Sub-Views 30
2.6.5 Service Injection 31
2.6.6 Mở rộng Blade 31
2.7 Eloquent: Relationships 32
2.7.1 Định nghĩa mối quan hệ 32
2.7.2 Truy vấn quan hệ 37
2.7.3 Eager Loading 39
2.7.4 Chèn và cập nhật các mô hình liên quan 40
2.8 Ưu điểm của Laravel 42
CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG ĐẶT VÉ XE KHÁCH GIƯỜNG NẰM 43
3.1 Phân tích 43
3.1.1 Mô tả thực trạng hệ thống quản lý đặt vé xe khách hiện nay 43
3.1.2 Đề xuất ứng dụng đặt vé xe khách giường nằm 43
3.1.3 Phân tích yêu cầu 44
3.2 Liệt kê tác nhân và Usecase 44
3.2.1 Các tác nhân 44
3.2.2 Các Usecase 44
3.3 Đặc tả việc đặt vé trên hệ thống 46
3.3.1 Mô tả quá trình hành khách tạo tài khoản trên hệ thống 46
3.3.2 Mô tả quá trình đặt vé 46
3.3.3 Mô tả quá trình duyệt ghế từ nhà xe 46
3.3.4 Mô tả quá trình đánh giá nhà xe 47
3.3.5 Quản trị tiếp nhận phản hồi của hành khách 47
3.4 Mô hình lớp, quan hệ giữa các lớp 47
3.4.1 Biểu đồ trình tự hoạt động 47
3.4.2 Biểu đồ lớp thực thể liên kết 49
3.5 Thiết kế giao diện 51
3.5.1 Giao diện của người quản trị 51
Trang 5KẾT LUẬN VÀ KIẾN NGHỊ 65
1 Kết luận 65
2 Kiến nghị 65
TÀI LIỆU THAM KHẢO 66
Trang 6DANH SÁCH HÌNH ẢNH
Hình 1.1 Thiết kế phù hợp với kích thước màn hình của thiết bị 6
Hình 1.2 Cấu trúc cơ bản 1 tài liệu 7
Hình 2.1 Các thành phần của mô hình MVC 14
Hình 2.2 Quy trình hoạt động mô hình MVC trong website 15
Bảng 2.1 Các thao tác được xử lý bởi bộ điều khiển tài nguyên 24
Bảng 2.2 Một số thuộc tính của biến $loop 29
Bảng 2.3 Mô tả quan hệ has-many-through 35
Bảng 2.4 Mô tả quan hệ đa hình 36
Hình 3.1 Biểu đồ usecase của tác nhân Hành khách 44
Hình 3.2 Biểu đồ usecase của tác nhân Nhà xe 45
Hình 3.3 Biểu đồ usecase của tác nhân người Quản trị 46
Hình 3.4 Trình tự đăng ký tài khoản 47
Hình 3.5 Trình tự hành khách đặt vé 48
Hình 3.6 Trình tự nhà xe xác nhận ghế đặt từ hành khách 48
Hình 3.7 Trình tự người quản trị 49
Hình 3.8 Biểu đồ lớp thực thể liên kết 49
Hình 3.9 Màn hình đăng nhập vào trang quản trị 51
Hình 3.10 Màn hình sau khi đăng nhập thành công 52
Hình 3.11 Màn hình giao diện danh sách xe khách 52
Hình 3.12 Màn hình giao diện khi hệ thống chưa đủ dữ liệu 53
Hình 3.13 Màn hình giao diện sửa chuyến đi 53
Hình 3.14 Màn hình giao diện sửa xe khách 54
Hình 3.15 Màn hình giao diện thêm chuyến đi 54
Hình 3.16 Màn hình giao diện thêm xe khách 55
Hình 3.17 Giao diện xác nhận xóa 55
Hình 3.18 Màn hình giao diện đăng ký 56
Hình 3.19 Màn hình giao diện đăng nhập 57
Hình 3.20 Màn hình giao diện tìm chuyến 58
Hình 3.21 Màn hình giao diện tìm chuyến thành công 59
Hình 3.22 Màn hình giao diện khi chọn xe muốn đặt ghế 60
Trang 7Hình 3.24 Màn hình giao diện xác nhận đặt ghế hoặc hủy chuyến 62 Hình 3.25 Màn hình giao diện nhập sai điểm đi, điểm đến 63 Hình 3.26 Màn hình giao diện khi hệ thống chưa đủ dữ liệu 64
Trang 8DANH SÁCH THUẬT NGỮ VIẾT TẮT
Tên viết tắt Ý nghĩa
Trang 9PHẦN MỞ ĐẦU
1 Lý do chọn đề tài
Trong những năm gần đây, sự phát triển của công nghệ thông tin đặc biệt trong lĩnh vực thiết kế web đạt nhiều thành tựu to lớn và thay đổi cách thức làm việc, sinh hoạt, giao tiếp của con người Công nghệ thông tin đã giúp phát triển, tạo ra những trang web có tính tương tác với người dùng, giúp người dùng dễ dàng sử dụng và quản lý ví
dụ như các kênh mua bán online, đặt vé máy bay online, …
Hiện này, đã có nhiều trang web cung cấp thông tin xe khách nhưng chưa có trang web cho đặt ghế, xem chi tiết thông tin xe khách, lịch trình… thuận tiện
Việc mua vé xe khách thường thông qua bến xe hoặc gọi điện thoại nhưng hành khách rất khó lựa chọn được chỗ ưng ý
Chúng tôi mong muốn xây dựng hệ thống đặt vé qua môi trường Internet và việc nhắm đến là xây dựng trang web nhằm giúp hành khách thuận tiện và dễ dàng chọn được chuyến và chỗ ưng ý Đồng thời, cũng giúp nhà xe có thêm một kênh bán vé đắc
lực Với những lý do trên, chúng tôi chọn nghiên cứu đề tài: “Xây dựng hệ thống đặt
vé xe khách giường nằm”
2 Mục đích nghiên cứu
Nghiên cứu về xây dựng website
Nghiên cứu phát triển trang web đặt vé xe khách giường nằm
Tìm hiểu và xây dựng hệ thống đặt vé xe khách giường nằm
3 Đối tượng nghiên cứu
Hệ thống đặt vé xe khách qua website
4 Phạm vi nghiên cứu
Phân tích, thiết kế và cài đặt thử nghiệm hệ thống
5 Phương pháp nghiên cứu
Tổng hợp tài liệu
Nghiên cứu tài liệu
Khảo sát thực tế
Trang 106 Bố cục đề tài
Ngoài phần mở đầu và kết luận, đề tài gồm 3 chương:
Chương 1: Tổng quan về thiết kế web
Chương 2: Tìm hiểu về Laravel
Chương 3: Phân tích và thiết kế hệ thống đặt vé xe khách giường nằm
Trang 11CHƯƠNG 1: TỔNG QUAN VỀ THIẾT KẾ WEB
1.1 Lịch sử hình thành của thiết kế web
Internet có lịch sử phát triển chưa thực sự lâu nhưng hiện nay nó có vai trò quan trọng trong lĩnh vực CNTT Những tiện ích mà Internet mang lại giúp con người ngày càng thuận tiện hơn trong công việc, học tập, kết nối và giải trí
Có thể nói rằng: Internet có vai trò to lớn như ngày nay một phần lớn là nhờ sự phát triển của công nghệ website Nhờ các hệ thống website, con người có thể tìm kiếm, truyền tải, quảng bá, trao đổi thông tin một cách dễ dàng và thuận tiện Hiện nay, công nghệ web phát triển mạnh mẽ không chỉ dừng lại ở việc phát triển các trang web thông thường, mà còn là phát triển các ứng dụng trên thiết bị di động nền web (web-based applications)
Sự hình thành của thiết kế web:
Năm 1989, khi làm việc tại CERN, Tim Berners-Lee đã đề xuất để tạo ra một dự
án siêu văn bản toàn cầu mà sau này được gọi là World Wide Web Trong thời gian 1991-1993 World Wide Web đã ra đời Trang văn bản chỉ có thể được xem bằng cách
sử dụng một trình duyệt line-chế độ đơn giản Năm 1993, Marc Andreessen và Eric Bina tạo ra các trình duyệt Mosaic Vào thời điểm đó có nhiều trình duyệt, tuy nhiên phần lớn trong số họ là dựa trên Unix và không có sự tích hợp với các yếu tố thiết kế đồ họa như hình ảnh; âm thanh Các trình duyệt Mosaic đã phá vỡ mốc này W3C đã được thành lập trong tháng 10 năm 1994 để dẫn World Wide Web phát triển các giao thức phổ biến mà thúc đẩy sự phát triển của nó và đảm bảo khả năng tương tác W3C tiếp tục thiết lập các tiêu chuẩn mà nay có thể thấy như HTML, CSS, JavaScript
Năm 1994, Andreessen thành lập Communications Corp sau này được biết đến như Netscape Communications, trình duyệt Netscape 0.9 Netscape tạo ra các thẻ HTML riêng của mình mà không quan tâm đến quá trình chuẩn mực truyền thống Ví dụ, Netscape 1.1 bao gồm các thẻ cho việc thay đổi màu nền và định dạng văn bản với bảng trên các trang web
Trong suốt năm 1996-1999 các cuộc chiến trình duyệt bắt đầu, như Microsoft và Netscape đã đấu tranh cho sự thống trị bằng cách ra mắt nhiều cải tiến trong các phiên bản của mình Trong thời gian đó có rất nhiều công nghệ mới trong lĩnh vực này, đặc biệt là Cascading Style Sheets, JavaScript, và Dynamic HTML Trên toàn bộ, “cuộc
Trang 12chiến” trình duyệt đã dẫn đến nhiều sáng tạo tích cực và giúp thiết kế web phát triển với một tốc độ nhanh chóng
Sự phát triển của thiết kế website:
Năm 1996, Microsoft phát hành bản trình duyệt đầu tiên của mình, trong đó đã hoàn thành với các tính năng và các thẻ riêng Nó cũng là trình duyệt đầu tiên hỗ trợ phong cách trang, mà lúc đó được xem như là một kỹ thuật tối ưu Các đoạn mã HTML cho bảng ban đầu được dành cho việc hiển thị dữ liệu dạng bảng Tuy nhiên các nhà thiết kế nhanh chóng nhận ra tiềm năng của việc sử dụng bảng HTML cho các công việc phức tạp, bố trí nhiều cột đó mà không thể thực hiện Tại thời điểm này, thiết kế và thẩm
mỹ tốt dường như được ưu tiên hơn cấu trúc đánh dấu tốt, ít chú ý đến ngữ nghĩa và cách tiếp cận Trang web HTML được giới hạn trong các tùy chọn thiết kế của họ, thậm chí nhiều hơn như vậy với các phiên bản trước của HTML Để tạo ra các thiết kế phức tạp, nhiều nhà thiết kế web có sử dụng các cấu trúc bảng phức tạp
CSS được giới thiệu vào tháng 12 năm 1996 bởi W3C để hỗ trợ trình bày và bố trí Điều này cho phép mã HTML đơn giản và ngữ nghĩa hơn, cải thiện khả năng tiếp cận web
Năm 1996, flash (ban đầu được biết đến như là FutureSplash) đã được phát triển Vào thời điểm đó, các công cụ phát triển nội dung Flash tương đối đơn giản so với hiện nay, sử dụng bố trí cơ bản và các công cụ vẽ, ActionScript, và một thời gian sau nó cho phép các nhà thiết kế web vượt qua các nhược điểm của HTML, GIF và JavaScript Tuy nhiên, vì Flash yêu cầu một plug-in, nhiều nhà phát triển web tránh sử dụng nó vì sợ hạn chế thị phần của mình do thiếu khả năng tương thích Thay vào đó, các nhà thiết kế web dùng hình ảnh động gif (nếu họ không từ bỏ sử dụng đồ họa chuyển động hoàn toàn) và JavaScript cho các widget Nhưng những lợi ích của Flash đã làm cho nó phổ biến trên thị trường để cuối cùng làm việc theo cách của mình cho đại đa số các trình duyệt, và
đủ mạnh để được sử dụng phát triển toàn bộ trang
Kết thúc cuộc chiến trình duyệt đầu tiên:
Trong năm 1998 Netscape công bố mã Netscape Communicator dưới một giấy phép mã nguồn mở, cho phép các lập trình viên tham gia vào việc cải thiện các phần mềm Các dự án Web tiêu chuẩn đã được hình thành và phát huy tuân thủ trình duyệt với HTML và CSS tiêu chuẩn bằng cách tạo ra Acid1, Acid2 và Acid3
Trang 13Năm 2000 là một năm quan trọng đối với Microsoft Internet Explorer đã được phát hành cho Mac, điều này quan trọng vì nó là trình duyệt đầu tiên hỗ trợ đầy đủ HTML 4.01 và CSS 1, nâng cao về việc tuân thủ các tiêu chuẩn Nó cũng là trình duyệt đầu tiên hỗ trợ đầy đủ các định dạng PNG định dạng hình ảnh Trong thời gian này Netscape đã được bán cho AOL
Giai đoạn 1988 – nay:
Kể từ đầu thế kỷ 21 các trang web đã trở nên ngày càng phổ biến trong cuộc sống Khi điều này xảy ra kéo theo các công nghệ của web cũng phát triển Cũng đã có những thay đổi đáng kể trong cách mọi người sử dụng và truy cập website
Trình duyệt hiện đại: Kể từ khi kết thúc cuộc chiến trình duyệt đã có nhiều trình
duyệt mới đưa vào thị trường Nhiều trong số này là mã nguồn mở có nghĩa là họ có xu hướng phát triển nhanh hơn và hỗ trợ nhiều hơn các tiêu chuẩn mới Những tùy chọn mới được nhiều người xem tốt hơn so với Microsoft Internet Explorer Các trình duyệt phổ biến có thể kể tới như: Google Chrome, Mozilla Firefox, Apple Safari, Opera…
Tiêu chuẩn mới: W3C đã phát hành tiêu chuẩn mới cho HTML (HTML5) và CSS
(CSS3), cũng như phiên bản JavaScript API (từng là một tiêu chuẩn) Trong những năm trở lại đây, HTML5, CSS3, JavaScript đặc biệt là JQuery đã được sử dụng rộng rãi, giải quyết nhiều bài toán về ứng dụng nền web: trò chơi, phần mềm quản lý, web services
1.2 Xu hướng phát triển của thiết kế web
1.2.1 Mobile-first
Là một quy trình thực hiện thiết kế đi từ giao diện cho mobile đầu tiên sau đó
mới tới những thiết bị khác như ipad, laptop, desktop… Các trang web thiết kế thân
thiện với thiết bị di động cũng dần trở thành một xu hướng tất yếu, một tiêu chuẩn web không thể thiếu ngày nay
1.2.2 Thiết kế website tương thích với mọi kích thước của thiết bị
Thiết kế responsive là website tự động biết được kích thước màn hình của thiết
bị khách truy cập như thế nào để hiển thị cho phù hợp trên màn hình đó Vì vậy, thiết kế web responsive cũng trở nên rất phổ biến trong những năm gần đây nhờ vào sự gia tăng của việc sử dụng Internet trên thiết bị di động Thiết kế responsive được sử dụng phổ biến và an toàn vì nó đại diện cho một cách tương đối đơn giản và giá rẻ cho các doanh nghiệp để xây dựng một trang web điện thoại di động thân thiện với đầy đủ chức năng
Trang 14Nhưng thiết kế web đáp ứng không đi kèm với một số vấn đề nếu không được thực hiện đúng cách, yếu tố hướng tới người dùng luôn được chú trọng nhiều nhất
Hình 1.1 Thiết kế phù hợp với kích thước màn hình của thiết bị
1.2.3 Sử dụng các framework của CSS và JavaScript
Các Framework như Bootstrap, Jquery đã tồn tại trong nhiều năm và tiếp tục chứng minh sự hữu ích trên các dự án cả cá nhân và chuyên nghiệp Việc sử dụng các framework này giúp cho lập trình viên dễ dàng hơn trong việc tạo ra các website và cả những ứng dụng nền web
Hiện nay, các framework của JavaScript như AngularJS, NodeJS đang tiến một bước dài trong sự phát triển của website cũng như ứng dụng nền web Việc tạo ra các ứng dụng nền web theo đó cũng phát triển nhanh chóng và trở thành một trong những hướng mũi nhọn của công nghệ phần mềm hiện đại
1.3 Căn bản về HTML
1.3.1 HTML là gì?
- HTML là một ngôn ngữ đánh dấu dùng để miêu tả tài liệu web (các trang web)
- HTML viết tắt của Hyper Text Markup Language (ngôn ngữ đánh dấu siêu văn bản)
- Một ngôn ngữ đánh dấu bao gồm một tập các thẻ đánh dấu nội dung
- Tài liệu HTML được đánh dấu bằng các thẻ HTML
- Mỗi thẻ HTML dùng để mô tả một nội dung nào đó trên trang web
- HTML do Tim Berner-Lee giới thiệu năm 1990 và hiện đang được World Wide Web Consortium (W3C) tiếp tục duy trì
Trang 151.3.2 Tập tin HTML là gì?
- Tập tin HTML là một tập tin text có chứa các thẻ HTML (tập tin có phần mở rộng là html hoặc htm)
- Tập tin HTML còn được gọi là một trang web
- Nếu cú pháp có bị sai thì trình duyệt vẫn không báo lỗi, nó chỉ hiển thị không như ý muốn
1.3.3 Thẻ trong HTML
- Thẻ HTML là những từ khoá được định nghĩa trước nằm trong cặp dấu < >
<tên_thẻ>nội dung</tên_thẻ>
1.3.4 Cấu trúc của một tài liệu HTML
Hình ảnh dưới đây mô tả cấu trúc cơ bản của một tài liệu HTML (một trang web)
Hình 1.2 Cấu trúc cơ bản 1 tài liệu
Trang 16Với việc sử dụng CSS, ta có thể định dạng ra các phần tử HTML đặc biệt và chuyên nghiệp
CSS2 được công bố vào 5/1998, được phát triển dựa trên CSS1 Phiên bản này bổ sung sự hỗ trợ tới một số thiết bị (như máy in, …), các thiết bị về âm thanh, các bảng CSS3 được công bố vào 6/1999 Tại phiên bản này, CSS được phân chia thành các Module nhỏ và từng Module chịu trách nhiệm cho một tính năng cụ thể nào đó
1.4.3 Lợi thế của CSS
CSS tiết kiệm thời gian và công sức: Nếu đã học qua về HTML, sẽ thấy một điều rằng: HTML không chứa bất cứ một thẻ nào để định dạng một trang web HTML được tạo để miêu tả nội dung của một trang web, còn CSS được dùng để định dạng chúng Bắt đầu từ HTML 3.2, các thẻ như <font> và các thuộc tính như color được thêm vào Việc thiết kế các trang web lớn, với thông tin về font và color trải dài qua nhiều trang đơn, thì việc xác định font và thêm thuộc tính color vào các trang này tốn rất nhiều
thời gian và công sức
Để xử lý vấn đề này, World Wide Web Consortium (W3C) đã tạo ra CSS Và từ
Trang 17font và color cho từng trang web một, giờ đây, họ chỉ cần tạo một tệp css ở ngoài, và
sau đó thêm vào từng trang web Khi đó, có thể thay đổi giao diện của cả một website
lớn chỉ trong một thời gian rất ngắn bằng cách tạo các thay đổi trong tệp css
Sử dụng CSS giúp trang web tải nhanh hơn: Sử dụng CSS, không cần phải viết từng thuộc tính cho từng thẻ HTML mỗi khi cần đến Chỉ cần viết một định dạng (style)
CSS trong tệp css và áp dụng cho tất cả các thẻ đó Ít code hơn tức là sẽ giúp trang web
tải nhanh hơn
Sử dụng CSS giúp dễ dàng bảo trì và nâng cấp trang web hơn
CSS có nhiều thuộc tính hơn HTML Do đó, sử dụng CSS giúp tạo các trang web đẹp hơn nhiều khi so sánh với việc sử dụng các thẻ và thuộc tính HTML thuần
Sử dụng CSS là phù hợp với chuẩn quốc tế Hiện tại, rất nhiều thuộc tính của HTML đã trở thành cũ và nhiều trình duyệt không còn hỗ trợ chúng nữa Do đó, để tương thích với các trình duyệt trong tương lai, nên sử dụng CSS
1.5 Căn bản về JavaScript
1.5.1 JavaScript là gì?
JavaScript (JS) là một ngôn ngữ lập trình phía client: mã được thực thi bởi trình
duyệt của người dùng, sau khi trang web gửi về từ server
JavaScript được sử dụng để tạo ra các trang web có tính tương tác:
- Chèn nội dung động vào trang web
- Đáp ứng lại các thao tác của người dung
- Lấy thông tin từ máy tính người sử dụng
- Thực hiện tính toán trên máy tính người sử dụng
- Tạo các ứng dụng, chức năng tương tác cho trang web
JavaScript là ngôn ngữ lập trình phổ biến bậc nhất thế giới, và là một trong ba ngôn ngữ (HTML, CSS, JavaScript) mà tất cả lập trình viên web nhất định phải học
JavaScript được nhúng vào trang web để kết hợp với HTML/CSS
1.5.2 Các lợi thế của JavaScript
Sự tương tác server ít hơn: Có thể kiểm tra đầu vào (input) của người sử dụng trước khi gửi trang tới server Điều này làm tiết kiệm lưu lượng tải ở server, nghĩa là server
hoạt động ít hơn
Phản hồi ngay lập tức tới khách truy cập: Họ không phải chờ cho một trang web
Trang 18Khả năng tương tác tăng lên: Có thể tạo các giao diện mà phản ứng lại khi người
sử dụng rê chuột qua chúng hoặc kích hoạt chúng thông qua bàn phím
Giao diện phong phú hơn: Có thể sử dụng JavaScript để bao gồm những mục như các thành phần Drag và Drop (DnD), các con trượt (Slider), cung cấp một Rich Interface (giao diện giàu tính năng) tới website khách truy cập
JavaScript không có bất kỳ khả năng đa luồng hoặc đa xử lý
JavaScript là một ngôn ngữ chương trình thông dịch, nhẹ mà cho phép xây dựng khả năng tương tác trong các trang HTML tĩnh
Kết luận
Qua chương 1, chúng tôi đã giới thiệu tổng quan về thiết kế web Lịch sử hình thành và xu hướng phát triển của thiết kế web, HTML, CSS, JavaScript Chương 2 chúng tôi sẽ giới thiệu về Laravel
Trang 19CHƯƠNG 2: TÌM HIỂU VỀ LARAVEL
2.1 Tổng quan về Laravel
2.1.1 Giới thiệu về Laravel
Laravel là một PHP Framework mã nguồn mở và miễn phí Laravel được tạo ra
bởi Taylor Otwell xây dựng bởi một Framework khác là Symfony nên sử dụng rất
nhiều thành phần được xây dựng từ Symfony Laravel được ra mắt phiên bản beta đầu tiên vào ngày (9/6/2011) với mục đích ra đời nhằm phát triển ứng dụng từ đơn giản đến
phức tạp theo mô hình Model - View - Controller (MVC) Mã nguồn được đặt trên Github và cấp phép theo các điều khoản của MIT License
2.1.2 Các tính năng cơ bản của Laravel
- Bundles: Laravel phiên bản 3.x, cung cấp một hệ thống đóng gói các module,
với nhiều tính năng đi kèm
- Composer: Laravel phiên bản 4.x, được sử dụng như một công cụ quản lý với
tính năng như thêm các gói cài đặt, các chức năng PHP phụ trợ cho Laravel có trong kho Packagist
- Eloquent ORM (object relation mapping): Ánh xạ các đối tượng và quan hệ cơ
sở dữ liệu, cung cấp các phương thức nội bộ để thực thi, đồng thời cũng bổ sung các tính năng hạn chế về mối quan hệ giữa các đối tượng cơ sở dữ liệu Eloquent ORM trình bày các bảng trong cơ sở dữ liệu dưới dạng các lớp, cung cấp thêm lựa chọn truy cập cơ
sở dữ liệu trực tiếp mới mẻ, chuyên nghiệp
- Application logic: Là một phần của phát triển ứng dụng, được sử dụng bởi bộ
điều khiển controllers
- Routes: Định nghĩa mối quan hệ giữa các đường dẫn (url), các liên kết (link)
Khi một liên kết được tạo ra bằng cách sử dụng tên của routes thì một định danh liên kết thống nhất sẽ được tạo ra bởi laravel
- Restful Controller: Cung cấp các tùy chọn để tách các logic phía sau các request
HTTP POST, GET
- Class auto loading: Cung cấp việc tải tự động các class trong PHP mà không
cần include các class vào Tùy thuộc vào yêu cầu các class cần thiết sẽ được nạp vào, hạn chế các class không cần thiết
- View: Chứa các mã html, hiển thị dữ liệu được chỉ định bởi controller
Trang 20- Migrations: Cung cấp một hệ thống kiểm soát các phiên bản lược đồ cơ sở dữ
liệu (database cheme), làm cho web ứng dụng có khả năng tương tác phù hợp những thay đổi logic, các đoạn mã code của ứng dụng và những thay đổi cần thiết trong việc bố trí cơ sở dữ liệu, triển khai nới lỏng và cập nhật các ứng dụng
- Unit Testing: Unit testting chứa rất nhiều các hệ thống unit testing, giúp phát
hiện và ngăn chặn lỗi trong khuôn khổ nhất định Unit Testing có thể được chạy thông qua tiện ích command-line
- Automatic pagination: Tính năng tự động phân trang được tích hợp
vào Laravel giúp đơn giản hóa các nhiệm vụ thực hiện phân trang so với các phương pháp thông thường
2.1.3 Lịch sử phát triển của Laravel
- Laravel beta đầu tiên được phát hành vào ngày 9/6/2011, tiếp đó Laravel 1 phát
hành trong cùng tháng Laravel 1 bao gồm các tính năng như authentication,
localisation, model, view, session, routing and other mechanisms, nhưng vẫn còn thiếu
controller, điều này khiến nó chưa thật sự là một MVC framework đúng nghĩa
- Laravel 2 được phát hành vào tháng 9 năm 2011, thêm tính năng mới hỗ trợ
controller, điều này biến Laravel 2 thành một MVC framework hoàn chỉnh, hỗ trợ Inversion of Control (IoC), hệ thống template Blade Nhược điểm là hỗ trợ cho các
gói của nhà phát triển bên thứ 3 bị gỡ bỏ
- Laravel 3 được phát hành vào tháng 2 năm 2012 với một loạt các tính năng mới
bao gồm giao diện dòng lệnh (CLI) tên “Artisan”, hỗ trợ nhiều hơn cho hệ thống quản trị cơ sở dữ liệu, chức năng ánh xạ cơ sở dữ liệu Migration, hỗ trợ “bắt sự kiện” trong ứng dụng và hệ thống đóng gói gọi là “Bundles”
- Laravel 4 có tên mã là Illuminate, được phát hành vào tháng 5 năm 2013 Nó
được phân phối thông qua Composer, một chương trình quản lý gói thư viện phụ thuộc
độc lập của PHP Các tính năng trong Laravel 4 bao gồm tạo và thêm dữ liệu mẫu
(database seeding), hỗ trợ hàng đợi, các kiểu gửi mail và hỗ trợ “xóa mềm” (soft-delete:
record bị lọc khỏi các truy vấn từ Eloquent mà không thực sự xóa hẳn khỏi database)
- Laravel 5 được phát hành trong tháng 2 năm 2015, những tính năng mới của
Laravel 5 bao gồm hỗ trợ lập lịch định kỳ thực hiện nhiệm vụ thông qua một gói tên là
“Scheduler”, một lớp trừu tượng gọi là “Flysystem” cho phép điều khiển việc lưu trữ
Trang 21từ xa đơn giản như lưu trữ trên máy local, cải tiến quản lý assets thông qua “Elixir”, đơn giản hóa quản lý xác thực với các dịch vụ bên ngoài bằng gói “Socialite”
- Laravel 5.1 phát hành vào tháng 6 năm 2015, là phiên bản đầu tiên của Laravel nhận được hỗ trợ dài hạn (LTS), với kế hoạch sửa lỗi trong hai năm và các bản vá bảo
mật trong ba năm
- Laravel 5.3 được phát hành vào ngày 23 tháng 8 năm 2016 Các tính năng mới
trong bản 5.3 được tập trung vào việc cải thiện tốc độ phát triển bằng cách bổ sung thêm những cải tiến cho các tác vụ phổ biến
- Laravel 5.4 được phát hành vào ngày 24 tháng 1 năm 2017 Phiên bản này có
nhiều tính năng mới như Laravel Dusk, Laravel Mix, Blade Components and Slots,
Email Markdown, Automatic Facades, Higher Order Messaging for Collections, và
nhiều thứ khác
- Laravel 5.5 được phát hành vào ngày 30 tháng 8 năm 2017
- Laravel 5.6 được phát hành vào ngày 7 tháng 2 năm 2018
2.2 Mô hình MVC
2.2.1 Giới thiệu về mô hình MVC
Mô hình MVC (Model - View - Controller) là một kiến trúc phần mềm hay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm Nó giúp cho các lập trình viên tách ứng dụng của họ ra 3 thành phần khác nhau Model, View và Controller Mỗi thành phần
có một nhiệm vụ riêng biệt và độc lập với các thành phần khác
Trang 222.2.2 Các thành phần của mô hình MVC
Hình 2.1 Các thành phần của mô hình MVC
- Model: Là nơi chứa những nghiệp vụ tương tác với dữ liệu hoặc hệ quản trị cơ
sở dữ liệu (mysql, mssql…); nó bao gồm các class/function xử lý nhiều nghiệp vụ như
kết nối database, truy vấn dữ liệu, thêm – xóa – sửa dữ liệu…
- View: Là nới chứa những giao diện như một nút bấm, khung nhập, menu, hình
ảnh… Nó đảm nhiệm nhiệm vụ hiển thị dữ liệu và giúp người dùng tương tác với hệ thống
- Controller: Là nới tiếp nhận những yêu cầu xử lý được gửi từ người dùng, bao
gồm những class/function xử lý nhiều nghiệp vụ logic giúp lấy đúng dữ liệu thông tin
cần thiết nhờ các nghiệp vụ lớp Model cung cấp và hiển thị dữ liệu đó ra cho người dùng nhờ lớp View
Trang 232.2.3 Quy trình hoạt động mô hình MVC trong website
Hình 2.2 Quy trình hoạt động mô hình MVC trong website
Người dùng sử dụng một trình duyệt web bất kỳ (Firefox, Chrome, IE, …) để có thể gửi những yêu cầu (HTTP Request) có thể kèm theo những dữ liệu nhập tới những
Controller xử lý tương ứng Việc xác định Controller xử lý sẽ dựa vào một bộ Routing
điều hướng
Khi Controller nhận được yêu cầu gửi tới, nó sẽ chịu trách nhiệm kiểm tra yêu cầu đó có cần dữ liệu từ Model hay không Nếu có, nó sẽ sử dụng các class/function cần thiết trong Model và nó sẽ trả ra kết quả (Resulting Arrays), khi đó Controller sẽ
xử lý giá trị đó và trả ra View để hiển thị Controller sẽ xác định các View tương ứng
để hiển thị đúng với yêu cầu
Khi nhận được dữ liệu từ Controller, View sẽ chịu trách nhiệm xây dựng các
thành phẩn hiển thị như hình ảnh, thông tin dữ liệu… và trả về GUI Content để
Controller đưa ra kết quả lên màn hình trình duyệt
Trình duyệt sẽ nhận giá trị trả về (HTTP Response) và sẽ hiển thị với người dùng Kết thúc một quy trình hoạt động
Trang 242.3 Các thành phần của Laravel (phiên bản 5.4 trở lên)
2.3.1 Router
- Cơ về bản router
Hầu hết các route của laravel cơ bản là nhận một URI và một Closure, nó cung
cấp 1 cách rất đơn giản để định nghĩa một route:
Route::get('foo', function () {
return 'Hello World';
});
Các tệp đường dẫn mặc định
Tất cả các tuyến Laravel được định nghĩa trong các tệp tuyến đường, nằm trong
thư mục router Các tệp này được tự động nạp bởi khung công tác Router/web.php
xác định các tuyến đường cho giao diện web Các tuyến đường này được chỉ định cho nhóm middleware web, cung cấp các tính năng như trạng thái phiên và bảo vệ CSRF
Các tuyến đường trong các router/api.php là không xác định và được chỉ định cho
nhóm middleware api
Route::get('/user', 'UserController@index');
Các tuyến đường được xác định trong tệp router/api.php được lồng nhau trong
một nhóm tuyến đường bởi RouteServiceProvider Trong nhóm này, tiền tố URI / api được tự động áp dụng nên không cần phải áp dụng nó cho mọi đường dẫn trong tệp tin
Có thể sửa đổi tiền tố và các tùy chọn nhóm tuyến đường khác bằng cách sửa đổi lớp
RouteServiceProvider
- Các phương thức Router có sẵn
Bộ định tuyến cho phép ta đăng ký các tuyến đường đáp ứng với bất kỳ động từ nào từ HTTP:
Trang 25Bất kỳ biểu mẫu HTML nào trỏ đến các tuyến POST, PUT, hoặc DELETE được
định nghĩa trong tệp tuyến đường trang web phải bao gồm một trường mã thông báo
CSRF Nếu không, yêu cầu sẽ bị từ chối
<form method="POST" action="/profile">
@csrf
</form>
2.3.2 Tham số của Router
- Tham số bắt buộc
Khi cần nắm bắt các segments trong URI bên trong route Ví dụ, cần phải lấy ID của người dùng từ các URL
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
Có thể định nghĩa nhiều tham số theo yêu cầu:
Route::get('posts/{post}/comments/{comment}', function ($postId,
$commentId) {
//
});
- Tham số tùy chọn
Khi cần phải định nghĩa một route đặc biệt chứa tham số, nhưng sự hiện diện của tham số đấy có thể có hoặc không, có thể dùng cách đặt dấu “?” sau tên tham số, và gán cho nó một giá trị mặc định:
Route::get('user/{name?}', function ($name = null) {
Trang 262.3.3 Tên Router
Tên routes cho phép đặt tên thuận tiện cho các URL hoặc chuyển hướng cho các
route cụ thể Chỉ định một tên cho route bằng cách thêm name vào định nghĩa route
Route::get('user/profile', function () {
//
})->name('profile');
- Tạo URL từ route đã đặt tên
Khi gán tên cho một route xác định, có thể dùng tên của nó khi tạo URL hoặc
chuyển hướng thông qua hàm toàn cục route:
$url = route('profile');
return redirect()->route('profile');
Nếu tên route được định nghĩa với tham số, có thể truyền các tham số như là một
đối số thứ hai trong phương thức route Các đối số sẽ được chèn vào theo đúng thứ tự
Nhóm route cho phép chia sẻ các thuộc tính như middleware hoặc namespaces,
trên nhiều route mà không cần định nghĩa lại chúng trên mỗi route riêng Các thuộc tính chia sẻ được quy định trong một mảng định dạng là tham số đầu tiên của phương
// Uses first & second Middleware
Trang 27Một trường hợp sử dụng chung cho nhóm route giống như PHP namespace được
chỉ định với một nhóm của controllers Có thể sử dụng tham số namespace trong mảng
- Routing tên miền con
Nhóm route có thể được sử dụng để xử lý các routing tên miền con Tên miền con
có thể được gán tham số route như URIs, cho phép lấy một phần của tên miền con để sử dụng bên trong route hoặc controller Tên miền con có thể được xác định bằng cách sử
dụng từ khóa domain trong mảng thuộc tính:
Route::group(['domain' => '{account}.myapp.com'], function () { Route::get('user/{id}', function ($account, $id) {
});
});
- Tiền tố Route
Thuộc tính prefix có thể sử dụng để thêm tiền tố cho mỗi route trong một nhóm
với một URI Ví dụ, tất cả các tiền tố của tất cả các route URIs trong nhóm là admin:
Route::group(['prefix' => 'admin'], function () {
Route::get('users', function () {
// Matches The "/admin/users" URL
});
});
2.3.5 Route Model Binding
Khi inject một model ID vào route hoặc controller, thường truy vấn để để nhận model tương ứng với ID Laravel route model binding cung cấp một cách khá thuận tiện
là tự động inject trực tiếp trường model vào route
Trang 28Nếu muốn mô hình ràng buộc có thể sử dụng một cột cơ sở dữ liệu khác với ID
khi lấy ra một mô hình mô hình lớp, có thể ghi đè lên mô hình Eloquent:
- Tùy chỉnh theo Resolution Logic
Nếu muốn sử dụng resolution logic theo cách riêng, có thể dùng phương thức Route::bind Thuộc tính Closure sẽ truyền qua phương thức bind sẽ nhận được
giá trị tham biến trên segment URI và sẽ trả về một thể hiện của class muốn thêm vào
route:
$router->bind('user', function ($value) {
return App\User::where('name', $value)->first();
});
2.3.6 Form Method Spoofing
HTML forms không hỗ trợ một số method PUT, PATCH hoặc DELETE Vì vậy, Khi định nghĩa PUT, PATCH hoặc DELETE routes mà được gọi từ HTML form, sẽ cần phải thêm một trường hidden _method vào form Giá trị của trường hidden là _method sẽ
sử dụng phương thức HTTP request:
2.3.7 Truy cập vào tuyến hiện tại
Sử dụng current, currentRouteName và currentRouteAction các phương pháp
Trang 29phép request được thực hiện tiếp tiến trình xử lý vào ứng dụng
2.4.1 Xác định Middleware
Ví dụ: Để tạo một middleware mới, sử dụng lệnh Artisan: make:middleware
php artisan make:middleware CheckAge
Lệnh này sẽ đặt một lớp CheckAge mới trong thư mục Phần mềm trung gian này
chỉ cho phép truy cập tuyến đường nếu cung cấp lớn hơn 200 Nếu không sẽ chuyển
hướng người dùng quay lại trang home URL
Nếu muốn một Middleware chạy trong mỗi yêu cầu HTTP cho ứng dụng, hãy liệt
kê lớp middleware trong lớp thuộc tính $middleware app/Http/Kernel.php
- Nhóm Middleware
Khi muốn nhóm một vài middleware lại trong một khóa để thực hiện gán vào route
Trang 30Mặc định, Laravel cung cấp sẵn 2 nhóm middleware web và api chứa những
middleware thường được sử dụng, có thể áp dụng cho web UI và API routes:
2.4.3 Tham số Middleware
Middleware cũng có thể nhận thêm các tham số truyền vào Ví dụ, nếu ứng dụng cần xác thực có "role" cụ thể trước khi thực hiện một thao tác nào đó, có thể tạo một CheckRolemiddleware để nhận tên của role như một tham số
Thêm các tham số middleware sẽ dược truyền vào middleware ngay sau tham
số $next của hàm handle
Tham số middleware có thể được khai báo trên route bằng cách phân chia tên middleware và tham số bởi dấu “:” nhiều tham số thì phân chia bởi dấu phẩy
Route::put('post/{id}',function($id){
//
})->middleware('role:editor');
2.4.4 Phần mềm trung gian có thể chạy được
Một middleware có thể cần phải làm một số công việc sau khi phản ứng HTTP đã được chuẩn bị
2.5 Controllers (Bộ điều khiển)
Thay vì xác định tất cả các yêu cầu xử lý logic như là đóng trong các tập tin tuyến đường, có thể tổ chức hành vi này bằng cách sử dụng các lớp Controller Bộ điều khiển
có thể nhóm logic, xử lý yêu cầu vào một lớp duy nhất Bộ điều khiển được lưu trữ
trong thư mục (app/Http/Controllers)
2.5.1 Bộ điều khiển cơ bản
- Bộ điều khiển & không gian tên
Có điều rất quan trọng cần lưu ý là không cần phải ghi rõ tên đầy đủ của controller
namespace khi chúng ta định nghĩa cho controller route Khi RouteServiceProvider tải
file route bên trong nhóm route có chứa namespace chỉ cần chỉ định tên class
sau App\Http\Controllers namespace
- Bộ điều khiển hành động đơn
Nếu muốn định nghĩa một controller xử lý duy nhất một action, có thể dùng
phương thức invoke trong controller:
<?php
Trang 312.5.2 Điều khiển Middleware
Middleware có thể được gán cho controller route ở trong file route
Route::get('profile','UserController@show')->middleware('auth'); Tuy nhiên sẽ tiện hơn nếu middlewar được để trong hàm constructor của controller
Sử dụng phương thức middleware trong hàm constructor của controller, có thể dễ dàng
gán middleware cho action controller Thậm chí còn có thể hạn chế cho một vài phương thức cụ thể ở trong class controller:
class UserController extends Controller
2.5.3 Bộ điều khiển tài nguyên
Laravel resource routing gán kiểu "CRUD" routes cho một controller chỉ với một dòng code Ví dụ, có thể tạo một controller xử lý tất cả HTTP requests cho "photos" lưu
Trang 32trong ứng dụng Sử dụng lệnh make:controller Artisan, có thể nhanh chóng tạo ra một
controller:
php artisan make:controller PhotoController resource
Câu lệnh trên sẽ sinh ra một controller tại thư
mục app/Http/Controllers/PhotoController.php Controller sẽ bao gồm method cho
các action của resource có sẵn
Tiếp theo, phải đăng ký một resourceful route cho controller:
Route::resource('photos', 'PhotoController');
Khai báo route này sẽ tạo ra nhiều route để xử lý đa dạng các actions trong resource Controller tạo ra sẽ có sẵn vài phương thức cho từng action, gồm những thông báo cho method HTTP và URIs xử lý
GET /photos/create create photos.create
GET /photos/{photo}/edit edit photos.edit PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy
Bảng 2.1 Các thao tác được xử lý bởi bộ điều khiển tài nguyên
- Spoofing Form Methods
HTML forms không hỗ trợ các request PUT, PATCH, hoặc DELETE, sẽ cần thêm một trường hidden _method vào spoof HTTP verbs Phương thức method_field có thể
làm điều đó:
{{ method_field('PUT')}}
- Các tuyến nguồn tài nguyên một phần
Khi khai báo một resource route, có thể chỉ định các tập con action của controller cần xử lý thay vì toàn bộ action mặc định ban đầu:
Route::resource('photos', 'PhotoController')->only([
Trang 33]);
Route::resource('photos', 'PhotoController')->except([
'create', 'store', 'update', 'destroy'
]);
- Tên Resource Routes
Mặc định, tất cả các action của resource controller đều có tên route; tuy nhiên, có
thể ghi đè lên đó bằng cách truyền thêm mảng chứa names với tùy chọn:
Route::resource('photos', 'PhotoController')->names([
'create' => 'photos.build'
]);
- Tên tham số Resource Route
Mặc định, Route::resource sẽ sinh ra tham số route cho resource routes dựa trên
tên của resource Có thể dễ dàng ghi đè cho từng phần resource cơ bản bằng cách
truyền parameters trong mảng như bên dưới Tham số parameters nên là một mảng kết
hợp giứa tên resource và tên tham số:
Route::resource('user', 'AdminUserController')->parameters([ 'user' => 'admin_user'
]);
- Bổ sung Resource Controllers
Nếu cần thêm route cho một resource controller ngoài các thiết lập mặc định của
resource route, thì nên định nghĩa những routes đó trước khi gọi Route::resource; nếu không thì những route đã được định nghĩa bởi resource method có thể vô tình bị ưu tiên
hơn những route mới bổ sung:
Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');ển nhỏ hơn
2.5.4 Phụ thuộc Injection và Controllers
- Constructor Injection
Phần service container Laravel sử dụng để xử lý tất cả các controllers Kết quả là
có thể type-hint bất cứ dependencies controller vào trong constructor Các dependencies
sẽ tự động xử lý và injected trong controller
Trang 34//The user repository instance
- Phương thức Injection
Ngoài việc xây dựng Injection, cũng có thể loại gợi ý phụ thuộc vào các phương
hơn 100x lần Để tạo ra route cache, just execute chỉ cần chạy lệnh route:cache Artisan:
php artisan route:cache
Sau khi chạy lệnh, file cached routes sẽ được tải với mọi request Nếu thêm một route mới cần phải làm mới lại route cache Vì lý do này chỉ lên chạy một lần
khi route:cache ứng dụng deploy
Sử dụng lệnh route:clear để xóa route cache:
php artisan route:clear
2.6 Blade Templates
2.6.1 Kế thừa mẫu
- Định nghĩa một bố cục
Trang 35- Kế thừa một layout
Khi tạo một trang con, sử dụng Blade @extends directive để chỉ ra layout của trang
con này "inherit" từ đâu Views kế thừa một Blade layout có thể inject nội dung vào
trong sections using @section directives của layout
- Hiển thị dữ liệu nếu tồn tại
Khi muốn hiện giá trị một biến, nhưng không chắc biến đó có giá trị hay không
Có thể thể hiện theo kiểu code PHP như sau:
{{ isset($name) ? $name : 'Default' }}
Thay vì viết kiểu ternary, Blade provides cung cấp một cách ngắn gọn hơn:
{{ $name or 'Default' }}
Trong ví dụ trên, nếu biến $name tồn tại giá trị sẽ được hiện thị Tuy nhiên, nếu
nó không tồn tại, Từ Default sẽ được hiển thị
- Hiện dữ liệu chưa Unescaped
Mặc định, cặp {{ }} được tự động gửi qua hàm htmlentities của PHP để ngăn chặn
tấn công XSS Nếu không muốn dự liệu bị escaped, có thể sử dụng cú pháp:
Trang 362.6.3 Cấu trúc điều kiện
Có xây dựng cấu trúc if bằng cách sử dụng @if, @elseif, @else,
và @endif directives Những directives tương ứng giống các từ khóa của PHP:
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
<li>{{ $user->name }}</li>
Trong vòng lặp, một biến $loop sẽ tồn tại bên trong vòng lặp Biến này cho phép
truy cập một số thông tin hữu ích của vòng lặp như index của vòng lặp hiện tại và vòng lặp đầu hoặc vòng lặp cuối của nó:
Trang 37This is the first iteration
@foreach ($users as $user)
@foreach ($user->posts as $post)
$loop->index Chỉ số index hiện tại của vòng lặp (starts at 0)
$loop->iteration Các vòng lặp hiện tại (starts at 1)
$loop->remaining Số vòng lặp còn lại
$loop->count Tổng số vòng lặp
$loop->first Vòng lặp đầu tiên
$loop->last Vòng lặp cuối cùng
$loop->depth Độ sâu của vòng lặp hiện tại
$loop->parent Biến parent loop của vòng lặp trong 1 vòng lặp lồng