CƠ SỞ LÝ THUYẾT
Ngôn ngữ lập trình PHP-LARAVEL
Laravel là một PHP framework mã nguồn mở và miễn phí, được phát triển bởi Taylor Otwell và nhắm vào mục tiêu hỗ trợ phát triển các ứng dụng web theo kiếm trúc model-view-controller (MVC) Những tính năng nổi bật của Laravel bao gồm cú pháp dễ hiểu – rõ ràng , một hệ thống đóng gói modular và quản lý gói phụ thuộc, nhiều cách khác nhau để truy cập vào các cơ sở dữ liệu quan hệ, nhiều tiện ích khác nhau hỗ trợ việc triển khai vào bảo trì ứng dụng.
Vào khoảng Tháng 3 năm 2015, các lập trình viên đã có một cuộc bình chọn PHP framework phổ biến nhất, Laravel đã giành vị trí quán quân cho PHP framework phổ biến nhất năm 2015, theo sau lần lượt là Symfony2, Nette, CodeIgniter, Yii2 vào một số khác Trước đó, Tháng 8 2014, Laravel đã trở thành project PHP phổ biến nhất và được theo dõi nhiều nhất trên Github. Laravel được phát hành theo giấy phép MIT, với source code được lưu trữ tại Github.
Laravel được Taylor Otwell tạo ra như một giải pháp thay thế cho CodeIgniter, cung cấp nhiều tính năng quan trọng hơn như xác thực và phân quyền Tôi cũng không chắc về điều này, nhưng có thể Taylor vốn là một NET developer khi bắt đầu có nhu cầu làm việc với PHP khoảng vào những năm 2010-2011, đã chọn CodeIgniter khi đó đang là một ngôi sao mới nổi, thậm chí lấn át cả Symfony gạo cội Và Taylor nhanh chóng nhận ra những điểm khiếm khuyết ở CodeIgniter, với tài năng và kiến thức xuất sắc về design-pattern của mình, Taylor quyết định tự mình tạo ra một framework sao cho thật đơn giản, dễ hiểu, hỗ trợ lập trình viên hiện thực ý tưởng một cách nhanh nhất bằng nhiều tính năng hỗ trợ như Eloquent ORM mạnh mẽ, xác thực đơn giản, phân trang hiệu quả, và hơn thế nữa.
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).
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.
2.2 Tổng quan về Laravel Framework
- Bundles : Ở laravel phiên bản 3.x, cung cấp một hệ thống đóng gói các module, với rất 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ẻ hơn, chuyên nghiệp hơn.
- 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
- 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 : đóng một vai trò quan trọng trong Laravel, 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.3 Tổng quan về hệ quản trị cơ sở dữ liệu MySQL
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Đối tượng sử dụng hệ thống
Website quản lý cửa hàng này hoạt động chủ yếu phục vụ cho các đối tượng chính sau: Chủ cửa hàng(Owner), Khách hàng(Member customer), Khách vãng lai(Customer), Quản lý(Manager), Nhân viên chăm sóc khách hàng(Seller), Nhân viên giao hàng(Shipper), Nhân viên bán hàng(Salle staff), Nhân viên kho(Technical staff)
Là người đã đăng ký làm thành viên và có nhu cầu mua sản phẩm.
Đăng ký, đăng nhập, xem thông tin sản phẩm, tìm kiếm, tạo giỏ hàng, cập nhập giỏ hàng, theo dõi đơn hàng, hủy đơn hàng, đánh giá.
Là người chưa đăng ký thành viên và muốn tìm kiếm sản phẩm mình muốn mua.
3.1.3 Nhân viên bán hàng(Salle staff)
Là nhân viên quản lý do chủ website cấp quyền, chịu trách nhiệm quản lý người đặt hàng, quản lý đơn hàng và hủy đơn.
Đăng nhập, đăng ký, cập nhật thông tin, đăng thông báo, quản lý hóa đơn, tra cứu thông tin.
3.1.4 Chủ cửa hàng/Quản trị Viên (Owner)
Là chủ của website có toàn quyền quyết định mọi vấn đề.
Là người nắm toàn toàn bộ quyền hạn của hệ thống.
Quản lý doanh thu của cửa hàng.
Đăng nhập, cập nhật thông tin, tra cứu thông tin, đăng thông sản phẩm, tìm sản phẩm, đăng thông báo, quản lý các tài khoản (Band tài khoản nếu vi phạm), quản lý sản phẩm (số lượng, giá, đánh giá).
3.1.5 Nhân viên kho(Technical staff)
Là nhân viên quản lý việc xuất- nhập kho hàng hóa.
Đăng nhập, xử lý đơn hàng, nhập phiếu hàng, báo cáo số lượng doanh thu hàng hóa.
3.1.6 Nhân viên giao hàng(Shipper)
Là người tiếp nhận giao hàng.
3.1.7 Nhân viên bán hàng(Salle staff)
Là nhân viên quản lý do chủ website cấp quyền, chịu trách nhiệm quản lý người đặt hàng, quản lý đơn hàng và hủy đơn.
Đăng nhập, đăng ký, cập nhật thông tin, đăng thông báo, quản lý hóa đơn, tra cứu thông tin.
3.1.8 Nhân viên chăm sóc khách hàng(Seller)
Là người tiếp nhận bảo hành sản phẩm khi có lỗi.
Phản hồi ý kiến và mọi thắc mắc của khách hàng.
Là người nắm hầu hết các quyền trong hệ thống sau chủ cửa hàng Là người đại diện cho chủ cửa hàng đứng qua quản lý website.
Quản lý đơn hàng, thông tin sản phẩm, báo cáo thống kê.
Giao diện đơn giản, dễ sử dụng.
Có tính bảo mật, an toàn.
Tốc độ xử lý nhanh chóng, dễ dàng.
Là người nắm tất cả các quyền trong hệ thống Họ có thể thêm, xóa sửa tất cả thông tin của sản phẩm, hàng hóa, nhân viên trong cửa hàng, quản lý chung tất cả các thành phần của cửa hàng Chủ cửa hàng còn có thể thiết lập được các quyền sử dụng trang web cho nhân viên.
Quản lý(Manager) Là người nắm hầu hết các quyền trong hệ thống sau chủ cửa hàng Là người đại diện cho chủ cửa hàng đứng qua quản lý website Quản lý đơn hàng, thông tin sản phẩm, báo cáo thống kê.
Nhân viên bán hàng(Salle staff)
Là người trực tiếp tiếp xúc với khách hàng, trao đổi, tư vấn, kiểm tra đơn hàng mà khách đã đặt.
Nhân viên chăm sóc khách hàng(Seller)
Là người trực tiếp nhận bảo hành sản phẩm khi có lỗi Phản hồi ý kiến và mọi thắc mắc của khách hàng.
Nhân viên giao hàng(Shipper)
Là người tiếp nhận đơn hàng và trực tiếp giao sản phẩm đến tay khách hàng.
Nhân viên kho(Technical staff)
Là người trực tiếp quản lý kho Họ có thể thêm, cập nhật các thông tin của hàng hóa Họ có thể nhập, xuất hàng hóa khi cần thiết.
Là người đến cửa hàng đã có đăng ký thành viên, tìm kiếm, xem, mua trực tiếp, đặt hàng tại hệ thống.
Là khách hàng khi chưa đăng ký thành viên, có ý định lập tài khoản thành viên và mua sắm tại hệ thống.
Bảng 1: Tác nhân của hệ thống
Hình 4: Sơ đồ hoạt động tìm kiếm
3.1.3.2 Sơ đồ hoạt động đăng ký tài khoản
Hình 5: Sơ đồ hoạt động đăng ký tài khoản
3.1.3.3 Sơ đồ hoạt động đăng nhập
Hình 6: Sơ đồ hoạt động đăng nhập
3.1.3.4 Sơ đồ hoạt động cập nhật cho nhân viên
Hình 7: Sơ đồ hoạt cập nhật cho nhân viên
3.1.3.5 Sơ đồ hoạt động cập nhật sản phẩm
Hình 8: Sơ đồ hoạt động cập nhật sản phẩm
3.1.3.6 Sơ đồ hoạt động cập giỏ hàng
Hình 9: Sơ đồ hoạt động cập nhật giỏ hàng
3.1.3.7 Sơ đồ hoạt động đặt hàng
Hình 10: Sơ đồ hoạt động đặt hàng
3.1.3.8 Sơ đồ hoạt động quản lý doanh thu
Hình 11: Sơ đồ hoạt động quản lý doanh thu
3.1.4.1 Sơ đồ tuần tự “Đăng nhập”
Hình 12: Sơ đồ hoạt động hiển thị trang đăng nhập
3.1.4.2 Sơ đồ tuần tự trang “Đăng ký”
Hình 13: Sơ đồ hoạt động hiển thị trang đăng ký
3.1.4.3 Sơ đồ tuần tự trang “Tìm kiếm”
Hình 14: Sơ đồ tuần tự tìm kiếm
3.1.4.4 Sơ đồ tuần tự trang “Cập nhật nhân viên”
Hình 15: Sơ đồ tuần tự cập nhật nhân viên
3.1.4.5 Sơ đồ tuần tự trang “Cập nhật sản phẩm”
Hình 16: Sơ đồ tuần tự cập nhật sản phẩm
3.1.4.6 Sơ đồ tuần tự trang “Cập nhật giỏ hàng”
Hình 17: Sơ đồ tuần tự cập nhật sản phẩm
3.1.4.7 Sơ đồ tuần tự trang “Đặt hàng”
Hình 18: Sơ đồ tuần tự đặt hàng
3.1.4.8 Sơ đồ tuần tự trang “Quản lý doanh thu”
Hình 19: Sơ đồ tuần tự quản lý doanh thu
Hình 21: Sơ đồ chức năng
MySQL Workbench là một công cụ thiết kế cơ sở dữ liệu đa nền tảng được phát triển bởi MySQL Nó là một ứng dụng thành công phát triển từ dự án DBDesigner4.
MySQL Workbench cung cấp một công cụ giao diện đồ hoạ để làm việc với MySQL Server và CSDL MySQL Workbench hỗ trợ toàn vẹn cho MySQL Server phiên bản 5.1 và mới hơn, nó cũng tương thích với MySQL Server 5.0 (nhưng không phải là với tất cả chức năng) Nó không hỗ trợ MySQL Server phiên bản 4.x MySQL Workbench có thể sử dụng như là các công cụ giao diện người dùng riêng trên các hệ điều hành như Windows, Linux và OS
3.3.3 Thiết kế cơ sở dữ liệu
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú
Khachhang_id Mã khách hàng INT(10) Khóa chính
Khachhang_ten Tên khách hàng VARCHAR(255)
Khachhang_email Địa chỉ email VARCHAR(255)
Khachhang_matkhau Mật khẩu VARCHAR(255)
Khachhang_diachi Địa chỉ nơi ở NVARCHAR(255)
Khachhang_sdt Số điện thoại INT(10)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú admin_id Mã nhân viên INT(10) Khóa chính
Chucvu_id Mã chức vụ INT(10) Khóa ph admin _hoten Tên nhân viên VARCHAR(255) admin _email Địa chỉ email VARCHAR(255) admin _matkhau Mật khẩu VARCHAR(255) admin _diachi Địa chỉ nơi ở NVARCHAR(255) admin _sdt Số điện thoại INT(10)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú chucvu_id Mã chức vụ INT(10) Khóa chính chucvu _ten Tên chức vụ VARCHAR(255) chucvu_trangthai Trạng thái INT (11)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú nsx_id Mã nhà sản xuất INT(10) Khóa chính nsx _ten Tên nhà sản xuất VARCHAR(255) nsx _mota Mô tả TEXT nsx _trangthai Trạng thái INT (11)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú nvgiaohang_id Mã nhân viên INT(10) Khóa chính nvgiaohang _hoten Tên nhân viên VARCHAR(255) nvgiaohang _email Địa chỉ email VARCHAR(255) nvgiaohang _sdt Số điện thoại INT(10) nvgiaohang _diachi Địa chỉ nơi ở NVARCHAR(255) nvgiaohang _ghichu Ghi chú TEXT
3.3.1.6 tbl_danhmucsp(Loại sản phẩm)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú danhmuc_id Mã loại sản phẩm INT(10) Khóa chính danhmuc _ten Tên loại sản phẩm VARCHAR(255) danhmuc _mota Mô tả TEXT danhmuc _trangthai Trạng thái INT(11)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú sanpham_id Mã sản phẩm INT(10) Khóa chính sanpham _ten Tên sản phẩm VARCHAR(255) danhmuc_id Mã loại sản phẩm INT(10) Khóa phụ nsx_id Mã nhà sản xuất INT(10) Khóa phụ sanpham _mota Mô tả VARCHAR(255) sanpham _noidung Nội dung VARCHAR(255) sanpham _gia giá Decimal sanpham _hinhanh Hình ảnh VARCHAR(255)
Sanpham_trangthai Trạng thái INT(11)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú thanhtoan_id Mã hóa đơn BIGHT(20) Khóa chính thanhtoan _hinhthuc thanhtoan
VARCHAR(255) thanhtoan _trangthai Trạng thái VARCHAR(50)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú hoadon_id Mã hóa đơn INT(11) Khóa chính khachhang_id Mã khách hàng INT(11) Khóa phụ thanhtoan_id Mã thanh toán INT(11) Khóa phụ nvgiaohang_id Mã nhà sản xuất INT(11) Khóa phụ hoadon _tongtien Tổng tiền hóa đơn Decimal hoadon_trangthai Trạng thái INT(11)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú chitiethoadon_id Mã chi tiết hóa đơn
BIGHT(20) Khóa chính hoadon_id Mã hóa đơn INT(11) Khóa phụ
Coupon_id Mã giảm giá INT(11) Khóa phụ sanpham_id Mã sản phẩm INT(11) Khóa phụ sanpham _ten Tên sản phẩm VARCHAR(255) sanpham _gia Giá tiền Decimal sanpham _soluong Số lượng INT(50)
Thuộc tính Giải thích Kiểu dữ liệu Ghi chú coupon_id Mã giảm giá INT(10) Khóa chính coupon _ten Tên mã giảm giá VARCHAR(255)
Coupon_soluong Số lượng mã INT(11)
3.3.4.1.1 Xem thông tin hàng hóa đơn
Mục đích: Xem thông tin hóa đơn
Điều kiện trước: Người sử dụng phải đăng nhập thành công
Đầu vào: Đăng nhập thành công
Đầu ra: Thông tin đơn hàng đã đặt
3.3.4.1.2 Xem thông tin sản phẩm
Mục đích: Xem thông tin, xuất xứ của sản phẩm
Tác nhân: Nhân viên, khách hàng, khách vãng lai
Điều kiện trước: Người sử dụng phải đăng nhập thành công
Đầu vào: nhập thông tin sản phẩm cần tìm
Đầu ra: Thông tin sản phẩm
Mục đích: Nhập sản phẩm vào kho
Tác nhân: Nhân viên kho, quản trị viên
Điều kiện trước: Người sử dụng phải đăng nhập thành công
Đầu vào: Sản phẩm, số lượng, nhà cung cấp, tiền thanh toán
Đầu ra: Lưu các thông tin vào cơ sở dữ liệu
Mục đích: Mua món hàng cần mua.
Điều kiện trước: khách hàng đăng nhập thành công.
Mục đích: Tìm thêm nhà NCC cho sản phẩm
Tác nhân: Quản trị viên
Điều kiện trước: Người sử dụng phải đăng nhập thành công
Đầu vào: sản phẩm, số lượng, nhà cung cấp, tiền thanh toán
Đầu ra: Lưu các thông tin vào cơ sở dữ liệu
3.3.4.5 Thêm doanh mục sản phẩm
Mục đích: Thêm, sử, xóa một sản phẩm nào đó.
Tác nhân: Nhân viên kho.
Điều kiện: Người sử dụng phải đang nhập thành công.
Đầu vào: Truy cập vào Manager.
Đầu ra: Cập nhật thành công.
Mục đích: Chọn nhân viên giao hàng.
Tác nhân: Quản trị viên.
Điều kiện: Người sử dụng phải đăng nhập thành công.
Đầu ra: Đơn hàng đã được chọn người giao.
3.3.4.7 Xem báo cáo, thống kê doanh số
Mục đích: báo cáo doanh số theo ngày
Tác nhân: nhân viên quản lý
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống với quyền quản lý
Dữ liệu đầu vào: Từ ngày dd/mm/yyyy đến ngày dd1/mm1/yyy1
Dữ liệu đầu ra: Tổng tiền bán hàng, số đơn hàng, danh sách hóa đơn kèm chi tiết
Mục đích: báo cáo doanh số theo người bán
Tác nhân: nhân viên quản lý
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống với quyền quản lý
Dữ liệu đầu vào: Từ ngày dd/mm/yyyy đến ngày dd1/mm1/yyy1
Dữ liệu đầu ra: Tổng tiền bán hàng, số đơn hàng, danh sách hóa đơn kèm chi tiết
Mục đích: báo cáo doanh số theo hàng hóa bán được
Tác nhân: nhân viên quản lý
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống với quyền quản lý
Dữ liệu đầu vào: Từ ngày dd/mm/yyyy đến ngày dd1/mm1/yyy1, nhóm hàng
Dữ liệu đầu ra: Tổng tiền bán hàng, số đơn hàng, danh sách hóa đơn kèm chi tiết