Luận Văn Tốt Nghiệp Phát triển hệ thống website bằng ngôn ngữ Laravel. Nghiên cứu phát triển website trên nền tảng Laravel Framework được người dùng đánh giá cao 2016. Tìm hiểu cấu trúc, mô hình MVC, tính bảo mật....
Trang 1MỤ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
Trang 22.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
Trang 33.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 4LỜ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 5LỜ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 6DANH MỤC TỪ VIẾT TẮT
Trang 7DANH 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 8DANH 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
Trang 9Hì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 10MỞ ĐẦ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
Trang 115 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 12CHƯƠNG 1: CƠ SỞ LÝ THUYẾT1.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
Trang 13Bả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 14Laravel 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
Trang 15tin 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à 19001830.
- Tạo mới tài khoản:
$account = Account::create(array(
'email' => 'networksupport@matbao.com', 'password ' => '19001830',
) );
Trang 16- 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
Ví dụ:
Route::group( array( ‘before’=>’auth’), function(){
Route::get(‘admin/contacts’,’AdminController@contacts’);
Route::get(‘admin/deletessh’,’AdminController@deletessh’);
Trang 17a Download bộ nguồn Laravel:
https://github.com/laravel/laravel/tree/v4.1.18
Hình 1.3: Tải bộ cài đặt laravel
Trang 18Sau 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 19Hì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:
c:\xampp\htdocs\laravel-toidongian.com\app\config\app.php tìm đến dòng 29 để chỉnh lại URl cho
‘url’=>’http://localhost/laravel-toidongian.com’
Trang 20Hì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:generatemụ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
Trang 21- Kiểm tra quá trình cài đặt bằng cách chạy thử hệ thống website đã được cài đặt:
http://localhost/laravel-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
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 22Hì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';
Trang 23Trong 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 24DB::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
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 25Hì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 26hiể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:
http://showrom.com/category.php?vendor=honda&type=car
Thay vì để một đường dẫn ngớ ngẩn như vậy, chúng ta cần tạo ra 1 trang
http://showrom.com/car/honda
Đường dẫn đẹp thì có lợi cho người dùng, rất hiệu quả về mặt marketing cũng như SEO Nhưng để tạo được đường dẫn đẹp như vậy thường là nỗi đau khổ khi viết bằng cú pháp trong htaccess Nắm bắt được điều này, Laravel đã sớm đưa ra tính năng routing để tạo ra các đường dẫn đẹp và đơn giản, mà hiệu quả
Trang 27Că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 28return '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 29Chú ý: 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 30Tạ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 31Nê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 321.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,
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:
Trang 33Kiể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 34return 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ỳ
<?php
namespace App\Providers;
class AppServiceProvider extends ServiceProvider
{
Trang 35* 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 36<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>
Trang 37Hiể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 38như @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>
Trang 39<li>{{ $user->name }}</li>
foreach, nếu không có dữ liệu, sẽ chuyển qua xuất dữ liệu ở
giữa @empty và @endforelse.
Layout và kế thừa temaplate: Với một trang web có rất nhiều trang khác nhau, chúng ta không thể liên tục tạo mới file template cho từng trang trong khi chúng chỉ khác về nội dung chứ bố cục tổng thể thì không thay đổi Chúng ta không nên và cũng không thể copy lặp đi lặp lại cùng một đoạn code (DRY – Don’t Repeat Yourself), việc đó sẽ làm chúng ta rất mất thời gian để tạo ra cũng như bảo trì, nâng cấp các file template Laravel 5 cung cấp cho chúng ta giải pháp đơn giản để tổ chức hệ thống file template theo layout gọn gàng, có cấu trúc, giúp giảm thiểu tối đa thời gian triển khai giao diện
Định nghĩa một layout: Hai lợi ích chính của việc sử dụng Blade là kế thừa template và chia phần template thành section Để bắt đầu, hãy xem qua
một ví dụ đơn giản Đầu tiên, xem xét trang layout chính Hầu hết các ứng dụng web đều duy trì layout cơ bản giống nhau trên nhiều trang, điều đó rất tiện cho chúng ta để định nghĩa layout này như một view Blade đã học ởtrên:
<! Lưu tại resources/views/layouts/master.blade.php >
<html>
<head>
<title>App Name - @yield('title')</title>
</head>
Trang 40Những file này chứa phần lớn code HTML Tuy nhiên, chú ý vào hai từ
khóa chỉ thị @section và @yield Chỉ thị @section định nghĩa một mảnh/phần/đoạn nội dung, trong khi chỉ thị @yield dùng để hiển thị nội dung
của một phần nhất định
Bây giờ đã có một layout được định nghĩa cho ứng dụng của mình Hãy tiếp tục định nghĩa các trang con kế thừa từ layout chính này
Mở rộng layout: Khi định nghĩa một trang con, bạn có thể sử dụng từ khóa chỉ
thị @extends để chỉ định trang con nên kế thừa từ layout nào Các view kế
thừa từ Blade layout có thể chèn nội dung vào các section ở layout đã định
nghĩa bằng @section Như đã xem ví dụ ở trên, nội dung của section cũng sẽ hiển thị trong layout ở những nơi có dùng @yield:
<! Lưu tại resources/views/child.blade.php >