Laravel 3 được phát hành vào tháng 2 năm 2012, với một tấn 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 á
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC -
NGUYỄN LINH
XÂY DỰNG WEBSITE BÁN MỸ PHẨM TRỰC TUYẾN SỬ DỤNG FRAMEWORK LARAVEL
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC NGÀNH CỬ NHÂN CÔNG NGHỆ THÔNG TIN
Đà Nẵng, tháng 5/2016
Trang 2TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC -
XÂY DỰNG WEBSITE BÁN MỸ PHẨM TRỰC TUYẾN SỬ DỤNG FRAMEWORK LARAVEL
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC NGÀNH CỬ NHÂN CÔNG NGHỆ THÔNG TIN
Trang 3Sinh viên thực hiện: Nguyễn Linh – 12CNTT i
MỤC LỤC
MỞ ĐẦU 1
1 Tính cấp thiết của đề tài: 1
2 Mục tiêu nghiên cứu: 1
3 Đối tượng, phạm vi nghiên cứu: 1
4 Phương pháp nghiên cứu: 1
5 Bố cục đề tài: 2
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 3
1.1 GIỚI THIỆU FRAMEWORK LARAVEL: 3
1.1.1 Khái niệm: 3
1.1.2 Lịch sử phát triển của Framework Laravel: 3
1.1.3 Ưu điểm của Laravel: 5
1.1.4 Các ví dụ cơ bản như : 6
1.2 CÀI ĐẶT: 8
1.2.1 Yêu cầu hệ thống: 8
1.2.2 Hướng dẫn cài đặt: 8
1.3 MÔ HÌNH MVC TRONG FRAMEWORK LARAVEL: 12
1.3.1 Controller: 13
1.3.2 View: 13
1.3.3 Model: 14
1.4 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU: 15
1.5 HƯỚNG DẪN SỬ DỤNG LAVAREL FRAMEWORK 17
1.5.1 Cách sử dụng Route: 17
1.5.2 Sử dụng View: 23
1.5.3 Sử dụng Controller trong Laravel 5: 33
1.3.4 Tạo bảng và khoá ngoại trong database Migration: 39
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 47
2.1 MỤC TIÊU VÀ YÊU CẦU ĐẶT: 47
Trang 4Sinh viên thực hiện: Nguyễn Linh – 12CNTT ii
2.1.1 Mục tiêu: 47
2.1.2 Yêu cầu hệ thống: 47
2.2 PHÂN TÍCH HỆ THỐNG: 48
2.2.1 Yêu cầu đề tài: 48
2.2.2 Hoạt động của hệ thống cửa hàng trên mạng: 48
2.2.3 Đặc tả quy trình nghiệp vụ: 50
2.3 XÂY DỰNG BIỂU ĐỒ USER CASE: 53
2.3.1 Mô hình Use case tổng quát : 53
2.3.2 Phân rã biểu đồ User case và kịch bản: 54
2.4 Thiết kế cơ sở dữ liệu 66
2.4.1 Nhóm các bảng độc lập: 66
2.4.2 Nhóm các bảng có quan hệ: 72
CHƯƠNG 3: KẾT QUẢ ĐẠT ĐƯỢC 78
3.1 GIAO DIỆN TRANG KHÁCH HÀNG: 78
3.1.1 Trang chủ: 78
3.1.2 Trang xem chi tiết sản phẩm: 79
3.1.3 Giao diện kết quả tìm kiếm: 80
3.1.4 Giao diện giỏ hàng: 80
3.1.5 Giao diện thanh toán trực tiếp bằng ngân lượng: 81
3.1.6 Giao diện thanh toán bằng hình thức COD: 81
3.1.7 Giao diện liên hệ: 82
3.1.8 Giao diện giới thiệu: 82
3.1.9 Giao diện tin tức: 83
3.2 GIAO DIỆN TRANG QUẢN TRỊ: 83
3.2.1 Giao diện đăng nhập: 83
3.2.2 Giao diện trang chủ quản trị: 84
3.2.3 Giao diện quản lý sản phẩm: 84
3.2.4 Giao diện quản lý danh mục sản phẩm: 87
Trang 5Sinh viên thực hiện: Nguyễn Linh – 12CNTT iii
3.2.5 Giao diện quản trị giỏ hàng: 87
3.2.6 Giao diện chi tiết giỏ hàng: 88
3.2.7 Giao diện thống kê đơn hàng: 88
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 89
DANH MỤC TÀI LIỆU THAM KHẢO 90
Trang 6Sinh viên thực hiện: Nguyễn Linh – 12CNTT iv
LỜI CẢM ƠN
Trước tiên, em thành thật xin tỏ lòng biết ơn sâu sắc của mình đến thây Ngô Đình Thưởng đã nhiệt tình hướng dẫn, nhận xét và đóng góp nhiều ý kiến quý báo cho em những lúc gặp khó khăn trong suốt quá trình thực hiện đề tài này
Em xin chân thành cảm ơn các thầy cô giáo đã tận tình dạy dỗ và truyền đạt những kiến thức quý báu cho em trong suốt bốn năm học tại Khoa Tin học, trường Đại học Sư phạm Đà Nẵng và tạo điều kiện cho em thực hiện và hoàn thành đề tài tốt nghiệp
Bên cạnh đó em luôn nhận được sự giúp đỡ nhiệt tình từ bạn bè và gia đình, đã động viên góp ý và cung cấp tài liệu để đề tài hoàn thành đúng thời gian
Mặc dù hết sức cố gắng, song với điều kiện thời gian và khả năng còn hạn chế nên đề tài không tránh khỏi những hạn chế và còn nhiều thiếu sót
Em kính mong sự chỉ bảo, đóng góp ý kiến của thầy cô và các bạn để đề tài của em được tốt hơn
Cuối cùng, em xin chân thành cảm ơn các thầy cô trong hội đồng bảo vệ khoá luận tốt nghiệp, đã dành thời gian quí báu của mình để nhận xét, đánh giá và chấm đề tài
Xin chân thành cảm ơn!
Đà Nẵng, tháng 05 năm 2016
Sinh viên thực hiện
Nguyễn Linh
Trang 7Sinh viên thực hiện: Nguyễn Linh – 12CNTT v
LỜI CAM ĐOAN
Tôi xin cam đoan đây là đề tài nghiên cứu của riêng tôi dưới sự hướng dẫn của thầy Ngô Đình Thưởng
Tôi có tham khảo tài liệu trên mạng để thực hiện đề tài
Đà Nẵng, tháng 5 năm 2016
Sinh viên thực hiện
Nguyễn Linh
Trang 8Sinh viên thực hiện: Nguyễn Linh – 12CNTT vi
DANH MỤC TỪ VIẾT TẮT
Trang 9Sinh viên thực hiện: Nguyễn Linh – 12CNTT vii
DANH MỤC BẢNG
Bảng 1.1: Các kiểu Index 44
Bảng 2.1: Kịch bản User case thêm sản phẩm 56
Bảng 2.2: Kịch bản Use case sửa sản phẩm 57
Bảng 2.3: Kịch bản Use case xoá sản phẩm 58
Bảng 2.5: Kịch bản Use case thêm hàng vào giỏ hàng 60
Bảng 2.6: Kịch bản Use case xoá hàng trong giỏ hàng 61
Bảng 2.7: Kịch bản Use case gửi đơn hàng 62
Bảng 2.8: Kịch bản Use case thanh toán đơn hàng 65
Bảng 2.8: Phân tích lớp thiensu_db.news 67
Bảng 2.9: Phân tích lớp thiensu_db.settings 68
Bảng 2.10: Phân tích lớp thiensu_db.contacts 69
Bảng 2.11: Phân tích lớp thiensu_db Banners 69
Bảng 2.12: Phân tích lớp thiensu_db password_resets 70
Bảng 2.13: Phân tích lớp thiensu_db Menus 70
Bảng 2.14: Phân tích lớp thiensu_db Migrations 71
Bảng 2.15: Phân tích lớp thiensu_db Users 71
Bảng 2.16: Phân tích lớp thiensu_db Pays 72
Bảng 2.17: Phân tích lớp thiensu_db.cates 73
Bảng 2.18: Phân tích lớp thiensu_db.orders 74
Bảng 2.19: Phân tích lớp thiensu_db.products 75
Bảng 2.20: Phân tích lớp thiensu_db.order_details 76
Bảng 2.21: Phân tích lớp thiensu_db.product_ images 77
Trang 10Sinh viên thực hiện: Nguyễn Linh – 12CNTT viii
DANH MỤC HÌNH ẢNH
Hình 1.1: Tỉ lệ người dùng Lavarel so với các framework khác năm 2013 3
Hình 1.2: Lịch sử phát triển của framework Lavarel 5
Hình 1.3: Tải bộ cài đặt laravel 8
Hình 1.4: Đổi tên thư mục chứa laravel bước 1 9
Hình 1.5: Đổi tên thư mục chứa laravel bước 2 9
Hình 1.6: Cấu trúc thư mục laravel 10
Hình 1.7: Điều chỉnh URL cho Laravel 11
Hình 1.8: Chạy lệnh php artisan generate trên terminal 11
Hình 1.9: Key trong file app.php được tự động điền 11
Hình 1.10: Kết quả chạy Laravel lần đầu 12
Hình 1.11: Cấu trúc mô hình MVC 13
Hình 1.12: Giao diện phpMyAdmin 16
Hình 1.13: Mô hình hoạt động một ứng dụng web động 16
Hình 2.1: Mô tả quá trình thêm sản phẩm vào giỏ hàng 50
Hình 2 2: Mô tả quá trình thêm sản phẩm vào giỏ hàng 51
Hình 2.3: Mô tả quá trình thêm sản phẩm vào giỏ hàng 52
Hình 2.4: Mô hình User Case tổng quát 53
Hình 2.5: Mô tả quá trình phân rã User Case cập nhật 54
Hình 2.6: Mô tả quá trình phân rã User Case cập nhật sản phẩm 55
Hình 2.7: Mô tả quá trình phân rã User Case đặt hàng 59
Hình 2.8: Mô tả quá trình phân rã User Case đặt hàng 63
Hình 2.9: Sơ đồ các lớp trong cơ sở dữ liệu 66
Hình 3.1: Giao diện trang chủ người dùng 1 78
Hình 3.2: Giao diện trang chủ người dùng 2 78
Hình 3.3: Giao diện xem chi tiết sản phẩm 79
Hình 3.4: Giao diện kết quả tìm kiếm 80
Trang 11Sinh viên thực hiện: Nguyễn Linh – 12CNTT ix
Hình 3.5: Giao diện giỏ hàng 80
Hình 3.6: Giao diện thanh toán COD không có tài khoản 81
Hình 3.7: Giao diện liên hệ 82
Hình 3.8: Giao diện giới thiệu 82
Hình 3.9: Giao diện tin tức 83
Hình 3.10: Giao diện đăng nhập admin 83
Hình 3.11: Giao diện trang chủ admin 84
Hình 3.12: Giao diện quản lý sản phẩm 84
Hình 3.13: Giao diện thêm sản phẩm mới 85
Hình 3.14: Giao diện sửa sản phẩm 86
Hình 3.15: Giao diện quản lý danh mục sản phẩm 87
Hình 3.16: Giao diện quản lý giỏ hàng 87
Hình 3.17: Giao diện chi tiết giỏ hàng 88
Hình 3.18: Giao diện thống kê đơn hàng 88
Trang 12Sinh viên thực hiện: Nguyễn Linh – 12CNTT 1
MỞ ĐẦU
1 Tính cấp thiết của đề tài:
Trong thực tế hiện nay nhu cầu làm đẹp của con người ngày càng tăng, nhưng lại không có thời gian để tới các cửa hàng mỹ phẩm để mua sắm những loại mỹ phẩm cần dùng Dựa vào sự phát triển như vũ bão của công nghệ thông tin như hiện nay tôi đã nãy sinh ra ý tưởng xây dựng hệ thống bán mỹ phẩm trực tuyến giúp cho khách hàng tiết kiệm thời gian và công sức nhưng
vẫn có được món hàng mình cần mua
2 Mục tiêu nghiên cứu:
Với những ký do đặt ra như thế, việc nghiên cứu và xây dựng website bán mỹ phẩm trực tuyến phải đảm bảo các tính năng cần thiết và cơ bản như sau: Cung cấp đầy đủ thông tin và chính xác về các sản phẩm cho khách hàng Xây dựng giỏ hàng trực tuyến cho khách hàng, khách hàng có thể mua hàng trực tuyến Thông tin về khách hàng phải được bảo mật Người quản trị website có thể quản lý toàn bộ các hoạt động của hệ thống
3 Đối tượng, phạm vi nghiên cứu:
Nghiên cứu và sử dụng ngôn ngữ HTML, CSS và Boostraps để xây dựng giao diện website
Sử dụng hệ quản trị cơ sở dữ liệu MYSQL để xây dựng và quản trị cơ sở
dữ liệu của website
Sử dụng framework Laravel để kết nối cơ sở dữ liệu và truy xuất thành file HTML ở giao diện cho người dùng sử dụng
4 Phương pháp nghiên cứu:
Nghiên cứu lý thuyết về các vấn đề liên quan
Xem các ví dụ liên quan tới lý thuyết sau đó thực hiện trở lại cho hiểu rõ
lý thuyết
Vận dụng vào để hoàn thành dự án thực tế
Trang 13Sinh viên thực hiện: Nguyễn Linh – 12CNTT 2
5 Bố cục đề tài:
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
Tìm hiểu framework Laravel để quản trị nội dung website là nội dung chủ đạo trong quá trình xây dựng hệ thống Nghiên cứu hệ quản trị cơ sở dữ liệu MySQL để lưu trữ dữ liệu của hệ thống Sử dụng Bootstrap để thiết kế
giao diện website
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
Phân tích các yêu cầu từ thực tế của người dùng để hình thành các chức năng đắp ứng được các yêu cầu đó Phân quyền cho hệ thống bao gồm: Khách hàng và quản trị viên Khách hàng có quyền truy cập vào hệ thống thực hiện các thao tác mà hệ thống cho phép Quản trị viên có quyền cao nhất quản lý
mọi hoạt động của hệ thống
CHƯƠNG 3: KẾT QUẢ ĐẠT ĐƯỢC
Là kết quả từ việc kết hợp việc phân tích hệ thống với nghiên cứu lý
thuyết để hoàn thành website bán mỹ phẩm trực tuyến
Trang 14Sinh viên thực hiện: Nguyễn Linh – 12CNTT 3
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 GIỚI THIỆU FRAMEWORK LARAVEL:
1.1.1 Khái niệm:
Laravel là một nền tảng ứng dụng web mã nguồn mở được viết bằng ngôn ngữ PHP dựa theo mô hình MVC Nó là framework khá mới mẻ, ra đời vào tháng 04-2011 và cha đẻ của nó Taylor Otwell Việc tiếp cận và sử dụng Laravel cũng giống như các framework kháck không phải là vấn đề quá khó khăn Các nhà phát triển framework Laravel đã xây dựng hệ thống hướng dẫn
sử dụng khá hoàn chỉnh và đầy đủ Nó giúp cho các lập trình viên tiết kiệm thời gian, công sức và chi phí để xây dựng một website
Hình 1.1: Tỉ lệ người dùng Lavarel so với các framework khác năm 2013 1.1.2 Lịch sử phát triển của Framework Laravel:
Trang 15Sinh viên thực hiện: Nguyễn Linh – 12CNTT 4
Bản Laravel beta đầu tiên được phát hành vào ngày 9/6/2011, tiếp đó
là Laravel 1 phát hành trong cùng tháng Laravel 1 bao gồm các tính năng
như xác thực, bản địa hóa, model, view, session, định tuyến và các cơ cấu khác, nhưng vẫn còn thiếu controller, điều này làm 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, mang đến nhiều cài
tiến từ tác giả và cộng đồng Tính năng đáng kể bao gồm hỗ trợ controller, điều này thực sự 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 Bên cạnh đó, có một 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 tấn 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 quản lý gói gọi là “Bundles” Lượng người dùng và sự phổ biến tăng trưởng mạnh kể từ phiên bản Laravel
3
Laravel 4, tên mã “Illuminate”, được phát hành vào tháng 5 năm 2013
Lần này thực sự là sự lột xác của Laravel framework, di chuyển và tái cấu trúc các gói hỗ trợ vào một tập đượ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 Bố trí mới như vậy giúp khả năng mở rộng của Laravel 4 tốt hơn nhiều so với các phiên bản trước Ra mắt lịch phát hành chính thức mỗi sáu tháng một phiên bản nâng cấp nhỏ Các tính năng khác 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 DB)
Trang 16Sinh viên thực hiện: Nguyễn Linh – 12CNTT 5
Laravel 5 được phát hành trong tháng 2 năm 2015, như một kết quả thay
đổi đáng kể cho việc kết thúc vòng đời nâng cấp Laravel lên 4.3 Bên cạnh một loạt tính năng mới và các cải tiến như hiện tại, Laravel 5 cũng giới thiệu cấu trúc cây thư mục nội bộ cho phát triển ứng dụng mới 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ữ từ xa đơn giản như lưu trữ trên máy local – dễ thấy nhất là mặc định hỗ trợ dịch vụ Amazone S3, cải tiến quản lý assets thông qua “Elixir”, cũng như đơ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à bản phát hành đầu tiên
nhận được hỗ trợ dài hạng (LTS) với một kết hoạch fix bug lên tới 2 năm vào
hỗ trợ vá lỗi bảo mật lên tới 3 năm Các bản phát hành LTS của Laravel được lên kế hoạch theo mỗi 2 năm
Hình 1.2: Lịch sử phát triển của framework Lavarel
1.1.3 Ưu điểm của Laravel:
Được thiết kế theo mô hình Model-View-Controller: Mô hình MVC giúp tách thành phần hiển thị giao diện (presentation) và xử lý (business logic) của một phần mềm thành những thành phần độc lập, từ đó giúp cho việc thiết kế,
xử lý và bảo trì mã nguồn dễ dàng, đồng thời tăng khả năng mở rộng của phần mềm CodeIgniter vận dụng mô hình này trong thiết kế, giúp tách biệt các tập
Trang 17Sinh viên thực hiện: Nguyễn Linh – 12CNTT 6
tin giao diện với các tập tin xử lý dữ liệu, nâng cao khả năng quản lý và dễ bảo trì
Hệ thống tài liệu (document) đã được làm lại một cách cẩn thận và rõ ràng hơn: Mỗi trang tài liệu đã được dành vô số thời gian tỉ mỉ để chăm chút cẩn thận Điều này cũng giúp cho người sử dụng nhanh chóng nắm được cách
sử dụng Laravel, từ đó nhiều người sử dụng nó hơn Hệ thống tài liệu lần này
đi kèm với khả năng tìm kiếm real-time và auto-complete
Việc quản lý layout thật sự giản đơn Dễ dàng tích hợp các thư viện của Zend và các gói bundle (giống như moduel) vào project Có rất nhiều gói bundle được cộng đồng mạng build sẵn và chia sẻ trên Internet
Laravel hỗ trợ nhiều cách viết để ngắn gọn nhất có thể và nhiều cách viết khác nhau: Như Fluent Query Builder và Eloquent
1.1.4 Các ví dụ cơ bản như :
- Tìm tài khoản theo Id:
$account = Account::find(1900); // tìm user có id là 1900
- Tìm tài khoản theo email và password khi login:
$account=Account::where_email_password('matbao.technicaldept@gm ail.com','19001830')->first();
// tìm user theo trường email có giá trị là matbao.technicaldept@gmail.com, theo trường password có giá trị là
Trang 18Sinh viên thực hiện: Nguyễn Linh – 12CNTT 7
- Hoặc có thể tạo mới tài khoản bằng cách sau:
$account = new Account;
$account ->email = 'mediasupport@matbao.com';
Khi làm việc với Route trong Laravel, các bạn có thể Group các rule (quy định) lại với nhau, các rule con nằm trong rule mẹ sẽ chịu ảnh hưởng
Trang 19Sinh viên thực hiện: Nguyễn Linh – 12CNTT 8
a Download bộ nguồn Laravel:
Download bộ nguồn Lavarel về tại website https://github.com/laravel/laravel/tree/v4.1.18
Hình 1.3: Tải bộ cài đặt laravel
Trang 20Sinh viên thực hiện: Nguyễn Linh – 12CNTT 9
Sau khi các bạn download về hãy bỏ nó vào thư mục gốc c:\xampp\htdocs\ Các bạn có thể đổi tên tùy ý giống như khi cài đặt CodeIgniter Mình sẽ đổi tên từ laravel-4.1.8
Hình 1.4: Đổi tên thư mục chứa laravel bước 1
Trang 21Sinh viên thực hiện: Nguyễn Linh – 12CNTT 10
Hình 1.6: Cấu trúc thư mục laravel
- Để hệ thống chạy được cần tuỳ chỉnh lại một số điểm sau:
• Vào đường dẫn toidongian.com\app\config\app.php tìm đến dòng 29 để chỉnh lại URl cho Laravel URL sau của mình sau khi chỉnh lại sẽ là
c:\xampp\htdocs\laravel-‘url’=>’http://localhost/laravel-toidongian.com ’
Trang 22Sinh viên thực hiện: Nguyễn Linh – 12CNTT 11
Hình 1.7: Điều chỉnh URL cho Laravel
• Kế tiếp bật ứng dụng terminal lên và gõ lệnh php artisan key:generate mục đích của lệnh này là tăng tính bảo mật của những cookie và session cho website
Hình 1.8: Chạy lệnh php artisan generate trên terminal
• Khi bạn gõ xong lệnh trên thì hãy đi đến dòng 68 của file app.php Lúc này thấy một điều là key tại dòng này đã được tự động điền
Hình 1.9: Key trong file app.php được tự động điền
Trang 23Sinh viên thực hiện: Nguyễn Linh – 12CNTT 12
- Kiểm tra quá trình cài đặt bằng cách chạy thử hệ thống website đã được cài đặt:
Mở trình duyệt lên và gõ toidongian.com/public nếu bạn nhận được hình ảnh như dưới đây thì đã cài đặt thành công Laravel FrameWork
http://localhost/laravel-Hình 1.10: Kết quả chạy Laravel lần đầu
1.3 MÔ HÌNH MVC TRONG FRAMEWORK LARAVEL:
Viết tắt của MVC là: Model, View, Controller
Trong đó:
- Model: thành phần chứa dữ liệu
- View: thành phần hiển thị giao diện trên màn hình
- Controller: thành phần kiểm soát model và điều khiển view để hiển thị cho người dùng
Trang 24Sinh viên thực hiện: Nguyễn Linh – 12CNTT 13
Hình 1.11: Cấu trúc mô hình MVC 1.3.1 Controller:
Khi được Router gọi, controller sẽ tiếp nhận lời gọi và xử lý
Nó có thể trả lại trực tiếp dạng text (trả lại một chuỗi bất kỳ, mở rộng ra thì có thể là xml, json, html, v.v )
Nó có thể gọi View: Tạo và truyền hoặc không truyền tham số cho view, thiết lập master layout
Nó có thể gọi các hàm của Model để tương tác với cơ sở dữ liệu
Nhiều trường hợp thì cách làm chung là controller sẽ gọi các hàm của model, ghi vào biến global hay local tùy bạn, sau đó phân tích và gọi view tương ứng, đáp lại người dùng
1.3.2 View:
Để chỉ ra layout nào sẽ được dùng thì trong controller ta thêm vào
protected $layout = 'layouts.master';
Laravel sử dụng Blade Templating, xem link http://laravel.com/docs/templates để xem cú pháp của nó
Trang 25Sinh viên thực hiện: Nguyễn Linh – 12CNTT 14
Trong view chúng ta có thể có sub view, dùng @include, chi tiết xem link Blade Templating ở trên
Ví dụ về cách sử dụng Model, View,Controler:
Vào app/controllers/HomeController.php, thay dòng
return "Xin chao $name";
thành
return View::make('home.hello', array('name' => $name));
Tham số đầu tiên chính là nơi chứa tập tin cần render, ‘home.hello’ thì tập tin hello.blade.php sẽ nằm tại thư mục app/views/home
Tham số thứ hai và các biến local cần truyền vào view
Nội dung tập tin hello.blade.php như sau:
Xin chao <strong>{{{ $name }}}</strong>
Refresh trình duyệt, kết quả nhận được là “Xin chao abc.” với chữ abc được in đậm
1.3.3 Model:
Chạy trực tiếp các câu SQL
Class DB của Laravel hỗ trợ select, insert, update, delete
Ví dụ:
$results = DB::select('select * from users where id = ?', array(1));
DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle')); DB::update('update users set votes = 100 where name = ?',
array('John'));
DB::delete('delete from users');
Với các câu lệnh khác thì ta sẽ dử dụng hàm statement của class DB, vd:
DB::statement('drop table users');
Để thực hiện dạng giao tác thì class DB cũng hỗ trợ:
DB::transaction(function(){
Trang 26Sinh viên thực hiện: Nguyễn Linh – 12CNTT 15
DB::table('users')->update(array('votes' => 1));
DB::table('posts')->delete();
});
1.4 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU:
MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng Vì MySQL là cơ sở dữ liệu tốc độ cao, đơn giải, linh hoạt, ổn định và
dễ sử dụng, có tính khả chuyển, đặc biệt là miễn phí hoặc tốn rất ít phí, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet MySQL miễn phí hoàn toàn cho nên bạn có thể tải về MySQL từ trang chủ Nó có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS,
MySQL là một trong những ví dụ rất cơ bản về Hệ Quản trị Cơ sở dữ liệu quan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL)
MySQL được sử dụng cho việc bổ trợ PHP, Perl, và nhiều ngôn ngữ khác, nó làm nơi lưu trữ những thông tin trên các trang web viết bằng PHP hay Perl
Trang 27Sinh viên thực hiện: Nguyễn Linh – 12CNTT 16
Hình 1.12: Giao diện phpMyAdmin
Việc kết hợp CSDL với ứng dụng web, dữ liệu xử lý do php sẽ tương tác với CSDL như lấy dữ liệu, làm nội dung trang web từ trạng thái tĩnh sang động Sự linh hoạt này là cốt lõi của một ứng dụng web động (dynamic web application)
Hình 1.13: Mô hình hoạt động một ứng dụng web động
Mô hình tương tác giữ client - server: php và mysql
PHP dùng để gửi yêu cầu cho server và php đóng vai trò làm thông dịch
và lấy kết quả có được trả lại cho Client ở dạng mã HTML cho người dùng
Trang 28Sinh viên thực hiện: Nguyễn Linh – 12CNTT 17
hiểu và sử dụng Đây là những gì diễn ra khi client yêu cầu server cho phép gửi một yêu cầu lên forum :
Server sử dụng PHP để thực hiện việc chuyển tải yêu cầu
PHP thực hiện việc cần làm của nó, rồi báo cáo là nó cần đến MySQL để lưu trữ tin nhắn đó, PHP lưu cái yêu cầu này vào MySQL và sau này lấy ra lại
để sử dụng
MySQL đồng ý cho PHP thao tác trên mình
PHP trả lời cho Server MySQL đã chấp nhận yêu cầu, lệnh đã được gửi! Server có thể in nội dung tin nhắn
1.5 HƯỚNG DẪN SỬ DỤNG LAVAREL FRAMEWORK
1.5.1 Cách sử dụng Route:
Khái niệm về Route: Route thực hiện chức năng định tuyến, dẫn đường cho các HTTP request được gởi đến đúng nơi ta muốn nó đến Với các ứng dụng web ngày nay, việc làm cho ứng dụng có chức năng tốt – giao diện đẹp
là một chuyện, nhưng để có một trang web thực sự tốt thì “đường dẫn thân thiện” là không thể thiếu.Ví dụ bạn có 1 trang web thể hiện danh sách xe hơi của hãng Honda:
Trang 29Sinh viên thực hiện: Nguyễn Linh – 12CNTT 18
Căn bản về Route: Cần định nghĩa hầu hết các route của mình trong
file App/Http/route.php Cú pháp cơ bản để tạo route dùng 2 tham số là chuỗi
URI và 1 Closure (hàm nặc danh):
Trong đó các hàm get(), post(), put(), delete() chính là các HTTP
METHOD dùng cho route Tham số thứ nhất – URI – là phần phía sau domain trang web Tham số thứ 2 là hàm nặc danh, thực hiện xử lý cho từng
route Thử truy cập vào địa chỉ http://localhost/ bạn sẽ thấy từ “Hello World”, nhưng khi vào http://localhost/foo/bar thì lại không thấy gì, do phải gởi
request qua POST thì request mới qua route này
Đăng ký route cho nhiều METHOD cùng lúc: Đôi khi bạn sẽ cần xử lý
và response giống nhau trên nhiều method, bạn có thể sử dụng
hàm Route::match() để đăng ký cùng lúc nhiều method khác nhau:
Route::match(['get', 'post'], '/', function () {
return 'Hello World';
});
Hoặc dùng hàm Route::any() để đăng ký cho tất cả các method:
Route::any('foo', function () {
Trang 30Sinh viên thực hiện: Nguyễn Linh – 12CNTT 19
return 'Hello World';
});
Đặt tên cho route và tạo URL
Để khai báo tên cho route, sử dụng từ khóa as :
Route::any('foo', function () {
return 'Hello World';
});
Tương tự cũng có thể đặt tên cho route trỏ tới controller actions
Route::get('user/profile', [ 'as' => 'profile', 'uses' =>
UserController@showProfile']);
Việc đặt tên giúp bạn dễ dàng tạo URL mong muốn Ví dụ, để tạo URL
đến trang profile cá nhân: route('profile')
Khi số lượng route trên website của bạn tăng lên, các URI dài và khó nhớ, việc đặt tên sẽ hiệu quả hơn nhiều so với việc bạn cộng chuỗi để tạo ra các URL mong muốn
Route có tham số: Sử dụng tham số rất thường xuyên, sẽ có nhu cầu lấy thông tin trong URL người dùng truy cập Đó có thể là username, id của người dùng; slug của một bản tin, v.v… Có thể định nghĩa tham số trong route như sau:
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
Định nghĩa nhiều tham số khác nhau trong URI theo nhu cầu sử dụng:
Route::get('posts/{post}/comments/{comment}', function ($postId,
$commentId) {
//
});
Trang 31Sinh viên thực hiện: Nguyễn Linh – 12CNTT 20
Chú ý: Các tham số phải được định nghĩa trong cặp dấu {} , tên tham số
không được chứa dấu (-) nếu cần có thể dùng dấy gạch dưới (_) để thay thế Tham số không bắt buộc: Đôi khi sẽ có những route với tham số là không bắt buộc, có cũng được, không có cũng được Với các tham số dạng này có thể đặt dấu ( ? ) ngay sau tên tham số để đánh dấu nó là tham số không bắt buộc:
Route::get('user/{name?}', function ($name = null) {
Route::get('user/{name}', function ($name) {
// Xem tham số ở vị trí này là tên, nhận giá trị chuỗi
})
->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
// Xem tham số ở vị trí này là id, nhận giá trị số
Trang 32Sinh viên thực hiện: Nguyễn Linh – 12CNTT 21
Tạo nhóm route: Tạo nhóm route giúp chúng ta chia sẻ các thành phần dùng chung, giống nhau giữa các route như middleware, namespace hay prefix Để khai báo các chia sẻ này, ta viết vào một mảng và đặt vào tham số
thứ nhất của hàm Route::group()
Chúng ta có một số trường hợp chia sẻ trong nhóm như sau:
Chia sẻ middleware: Middelware là một bộ lọc, request phải qua bộ lọc này kiểm tra-xử lý gì đó trước khi được gởi tới phần code mà đã được khai báo trong route hay controller actions Dễ hiểu nhất là trường hợp kiểm tra người dùng đăng nhập rồi mới cho phép comment chẳng hạn
Để chia sẻ middleware giữa một nhóm route, sử dụng từ khóa middleware :
Route::group(['middleware' => 'auth'], function () {
Trang 33Sinh viên thực hiện: Nguyễn Linh – 12CNTT 22
});
Nên nhớ routes.php tự hiểu namespace chung của các controller
là App\Http\Controllers nên không cần phải ghi cụ thể ra, chỉ cần ghi tên
Controller
Chia sẻ tiền tố của URI: Prefix có thể dùng để đặt tiền tố cho một nhóm URI mong muốn Ví dụ, muốn gom nhóm tất cả các route của trang quản lý website với tiền tố “backend”:
Route::group(['prefix' => 'backend'], function () {
Cũng có thể đặt tham số trong tiền tố như route bình thường:
Route::group(['prefix' => 'accounts/{account_id}'], function () {
Route::get('detail', function ($account_id) {
// Tương ứng với URL /accounts/{account_id}/detail
});
Sub-domain routing: Đặc biệt hơn, Laravel còn có khả năng gom nhóm route trên sub-domain, có thể đặt tham số giống như route bình thường khác
Sử dụng từ khóa domain để khai báo:
Route::group(['prefix' => 'accounts/{account_id}'], function () {
Route::get('detail', function ($account_id) {
// Tương ứng với URL /accounts/{account_id}/detail
});
Trang 34Sinh viên thực hiện: Nguyễn Linh – 12CNTT 23
1.5.2 Sử dụng View:
Khái niệm: View là một tầng logic trong mô hình MVC, mục đích của
nó là tách phần hiển thị nội dung ra khỏi phần xử lý dữ liệu của PHP Do đó, đúng với tiêu chuẩn thì View chỉ chịu trách nhiệm nhận dữ liệu đầu cuối và hiển thị ra giao diện Tất cả view của Laravel sẽ mặc định lưu
trong resources/views
Ví dụ đơn giản về một file view như sau:
<! View stored in resources/views/greeting.php >
Hàm view() nhận vào hai tham số Tham số thứ nhất chính là tên của
view, chỉ cần gọi tên, không cần thêm vào đuôi “.php” Tham số thứ hai là một mảng để truyền dữ liệu đã “xử lý” vào view; nó là một mảng, với key là tên của biến sẽ sử dụng ở view và value là giá trị của biến đó Như ví dụ trên, biến $name ở view được gán giá trị “James” ở route
Dĩ nhiên cũng có thể lưu file view và các thư mục con bên trong
resources/views Ví dụ, nếu lưu view tại resources/views/admin/profile.php,
có thể sử dụng view bằng cách:
return view('admin.profile', $data);
Trang 35Sinh viên thực hiện: Nguyễn Linh – 12CNTT 24
Kiểm tra view có tồn tại hay không:
Có thể kiểm tra xem view có tồn tại hay không bằng cách dùng
hàm exist() sau khi gọi hàm view() mà không có tham số, exist() sẽ trả về giá
trị true nếu file view tồn tại và ngược lại:
if (view()->exists('emails.customer')) {
//
}
Render view từ routes:
Gọi hàm view() trực tiếp từ route để render view mong muốn
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
Render view từ Controller:
View cũng có thể render từ controller tương tự như cách render từ route,
Trang 36Sinh viên thực hiện: Nguyễn Linh – 12CNTT 25
{
return view('greetings', ['name'=>'Thanh Thùy']);
}
}
Dữ liệu của view
Truyền dữ liệu vào view: Như đã nói ở trên, tham số thứ hai của hàm
view() nhận vào một mảng với key và value, bạn có thể thêm vào mảng bao
nhiêu cặp key=>value tùy ý để truyền dữ liệu từ route/controller sang view:
dụng biến này mà không xử lý gì thêm Giá trị truyền vào view có thể có bất
cứ kiểu dư liệu nào: Int, String, Array, Object,…
Chia sẻ dữ liệu với tất cả các view: Đôi khi, cần chia sẻ một thông tin cho tất cả các view sẽ hiển thị trên ứng dụng, ví dụ: hiển thị thông tin user đã đăng nhập lên thanh trạng thái của các trang backend chẳng hạn Không muốn
việc lặp đi lặp lại việc insert data trong hàm view có thể dùng hàm share() , gọi nó trong hàm boot() của một Laravel service provider bất kỳ
Trang 37Sinh viên thực hiện: Nguyễn Linh – 12CNTT 26
* Bootstrap any application services
và cache cho đến khi file Blade bị thay đổi; điều đó cũng có nghĩa là Blade tự làm tất cả những việc cần thiết để có thể chạy views cho ứng dụng của bạn
Các file view dùng cho Blade có phần tên đuôi file là blade.php và được lưu
trong thư mục resources/views
Tạo file template đầu tiên: Không khác biệt file PHP bình thường, ngoại trừ có phần mở rộng blade.php
<! resources/views/example.blade.php ><div class="article">
Trang 38Sinh viên thực hiện: Nguyễn Linh – 12CNTT 27
<h1>Bài hướng dẫn cách dùng Blade trong Laravel</h1>
Cặp dấu ngoặc {{ và }} sẽ thực hiện echo ra thông tin Đối với echo, bạn
thường phải dùng strip_tags() và htmlentities() để lọc text xuất ra, tránh bị
các lỗi XSS Nhưng với Blade, cặp dấu xuất này cũng thực hiện việc bao gói
dữ liệu xuất ra cho bạn, chúng ta không cần xử lý dữ liệu trước khi echo Tương tự, để hiển thị dữ liệu từ mảng, object hay từ hàm trả về, ta cũng thực hiện tương tự:
<p>{{ foo('name') }}</p>
<p>{{ bar['name'] }}</p>
<p>{{ $object->name }}</p>
Trang 39Sinh viên thực hiện: Nguyễn Linh – 12CNTT 28
Hiển thị dữ liệu thô: Để có thể hiển thị dữ liệu dạng raw text, nghĩa là có thể xuất HTML, JS… thì phải dùng cặp dấu {!! và !!} Nhưng cần chú ý sử dụng trong các trường hợp khác nhau Ví dụ, không nên hiển thị comment từ người duyệt web bằng cặp dấu này, hacker có thể lợi dụng để thực hiện chèn
mã độc lên website
Hello, {!! $name !!}
Dùng chung Blade template với các Javascript Framework: Rất nhiều Js framework cũng sử dụng {{ và }} để hiển thị nội dung lên trình duyệt, do đó khi code có khả năng bị “xung đột” với Blade Bạn có thể dùng @{{ và }} để báo cho Blade biết đừng đụng vào, vị trí này cho Js, ví dụ:
<h1>Laravel</h1>
Hello, @{{ name }}
Trong ví dụ này, khi dịch ra PHP, Blade sẽ xóa @ đi, và để nguyên nội dung {{ name }}lại, cho phép bạn xuất nội dung qua Js Framework Echo dữ liệu nếu tồn tại: Đôi khi cần echo một biến, nhưng lại không chắc chắn biến đó đã được khởi tạo hay gán dữ liệu chưa, có thể biểu diễn biểu lệnh xuất dữ liệu trong một dòng PHP như sau:
{{ isset($name) ? $name : 'Default' }}
Tuy nhiên, Blade cung cấp lối viết tắt còn ngắn gọn hơn thế nữa:
Câu lệnh If: Với câu lệnh if, bạn có thể dùng các chỉ thị trong template
Trang 40Sinh viên thực hiện: Nguyễn Linh – 12CNTT 29
như @if , @else , @elseif , @endif Các từ khóa chỉ thị này có ý nghĩa tương
Bạn chưa đăng nhập @endunless
Vòng lặp: Blade cung cấp các từ khóa chỉ thị tương ứng với các lệnh lặp trong PHP:
@for ($i = 0; $i < 10; $i++)
Giá trị hiện tại là {{ $i }}
@endfor
@foreach ($users as $user)
<p>Đây là user có mã {{ $user->id }}</p>