Được học các kỹ thuật sử dụng các thư viện mã nguồn mở để hiện thực các tính năng trong website, thay vì phải tự code.. - Ý nghĩa và vai trò của môn học: Thông qua các hoạt động học tập
Trang 1ỦY BAN NHÂN DÂN TP HỒ CHÍ MINH
TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THỦ ĐỨC
KHOA CNTT
GIÁO TRÌNH MÔN HỌC: LẬP TRÌNH BACK-END WEB 2 NGÀNH/NGHỀ: CÔNG NGHỆ THÔNG TIN
Trang 2LỜI GIỚI THIỆU
Môn học Lập trình Back-End Web 2 là môn học bắt buộc với chương trình đào
tạo ngành Công nghê thông tin Đây là môn học đầu tiên cho lập trình Back-End
Web và là môn học nền tảng cho cách tiếp cận một framework Ở môn học Lập
trình Back-End Web 1 trước đó, sinh viên đã được học một trong những ngôn
ngữ lập trình Back-End Web phổ biến nhất hiện nay là PHP, đồng thời, học cách kết nối, tương tác với dữ liệu với MySQL Trong môn học này, sinh viên được tiếp cận framework phổ biến hiện nay Được học các kỹ thuật sử dụng các thư viện mã nguồn mở để hiện thực các tính năng trong website, thay vì phải tự code
Giáo trình này được biên soạn dựa theo đề cương môn học “Lập trình
Back-End Web 2” của Khoa Công nghệ thông tin – Trường Cao đẳng Công nghệ Thủ Đức Mặc dù tác giả biên soạn đã rất cố gắng, song chắc chắn sẽ không
tránh khỏi những thiếu sót Vì vậy, tác giả rất mong nhận được sự góp ý chân thành từ các Quý Thầy Cô và các bạn Sinh viên để giáo trình ngày càng hoàn thiện hơn
Trong quá trình biên soạn giáo trình này, tác giả nhận được nhiều góp ý từ tập thể Giảng viên Khoa Công nghệ thông tin, đặc biệt là sự đôn đốc của Thư ký Khoa về quy trình, tiến độ và các biểu mẫu để thực hiện biên soạn giáo trình được thành công
… , ngày…tháng năm 2020 Chủ biên: Phan Thanh Nhuần
MỤC LỤC
Trang 3Tên học môn học: Lập trình Back-End Web 2 vii
Mã môn học: CNC107454 vii
CHƯƠNG 1: TỔNG QUAN VỀ Laravel 1
1.1 GIỚI THIỆU CÁC FRAMEWORK MÃ NGUỒN MỞ 2
1.2 ĐÁNH GIÁ ƯU NHƯỢC ĐIỂM CÁC FRAMEWORK 3
1.2.1 CodeIgniter FRAMEWORK 3
1.2.2 Zend FRAMEWORK 3
1.2.3 Laravel FRAMEWORK 3
1.2.4 Symfony FRAMEWORK 3
1.3 CÁC TIÊU CHÍ ĐỂ CHỌN LỰA FRAMEWORK PHÙ HỢP 4
1.4 TÌM HIỂU VỀ LARAVEL 4
1.4.1 CẤU HÌNH LARAVEL 4
1.4.2 GIỚI THIỆU VỀ CẤU TRÚC ỨNG DỤNG 9
1.4.3 VIẾT CHƯƠNG TRÌNH HELLO WORLD TRONG Laravel 10
1.5 BÀI TẬP 12
CHƯƠNG 2: ROUTING VÀ MIDDLEWARE 14
2.1 KHAI BÁO ROUTING 15
2.1.1 TÙY BIẾN TRONG ROUTING 15
2.1.2 VÍ DỤ MINH HỌA 17
2.2 KHAI BÁO MIDDLEWARE 20
2.2.1 ĐĂNG KÝ MIDDLEWARE VỚI HỆ THỐNG 20
2.2.2 TÙY BIẾN TRONG MIDDLEWARE 23
2.3 BÀI TẬP 25
CHƯƠNG 3: HIỆN THỰC MÔ HÌNH MVC 26
3.1 XỬ LÝ REQUEST URI 27
3.1.1 GIỚI THIỆU 27
3.1.2 MỘT SỐ PHƯƠNG THỨC TRONG Illuminate\Http\Request 29
3.2 TƯƠNG TÁC TRÊN CONTROLLER 30
3.2.1 GIỚI THIỆU 30
Trang 43.2.2 TÙY BIẾN TRONG CONTROLLER 32
3.3 GỬI DỮ LIỆU RA VIEW 33
3.3.1 GIỚI THIỆU 33
3.3.2 TÙY BIẾN TRONG VIEW 34
3.4 TRUY VẤN DỮ LIỆU 37
3.4.1 GIỚI THIỆU 37
3.4.2 CẤU HÌNH DATABASE 38
3.4.3 TRUY VẤN DỮ LIỆU ĐƠN GIẢN 39
3.4.4 TRUY VẤN DỮ LIỆU QUAN HỆ 41
3.5 BÀI TẬP 44
CHƯƠNG 4: TƯƠNG TÁC DATABASE VỚI ELOQUENT ORM 45
4.1 TỔNG QUAN Error! Bookmark not defined 4.1.1 TRUY VẤN SINGLE MODEL 48
4.1.2 INSERT, UPDATE MODEL 49
4.1.3 XÓA DỮ LIỆU 50
4.2 RELATIONSHIPS 51
4.2.1 ONE TO ONE 51
4.2.2 ONE TO MANY 52
4.2.3 MANY TO MANY 53
4.3 COLLECTIONS 54
4.4 MUTATORS 55
4.4.1 ĐỊNH NGHĨA ACCESSOR 55
4.4.2 ĐỊNH NGHĨA MUTATORS 56
4.5 SERIALIZATION 57
4.6 BÀI TẬP 57
CHƯƠNG 5: XÁC THỰC NGƯỜI DÙNG 60
5.1 AUTHENTICATION 61
5.2 AUTHORIZATION 62
5.3 BÀI TẬP 65
Trang 5CHƯƠNG 6: XÂY DỰNG WEBSITE 66
6.1 ĐẶC TẢ YÊU CẦU DỰ ÁN 67
6.2 HIỆN THỰC DỰ ÁN 68
6.3 ĐÁNH GIÁ DỰ ÁN 68
6.4 MÔ TẢ SƠ LƯỢC YÊU CẦU DỰ ÁN 68
6.5 PHÁT TRIỂN VENDOR TRONG Laravel 69
Trang 6DANH MỤC TỪ VIẾT TẮT
Số thứ tự Từ viết tắt Dạng đầy đủ
1 LTS Long-term support
2 ORM Object-Relational Mapping
4 PHP Hypertext Preprocessor
5 CNTT Công nghệ thông tin
DANH MỤC HÌNH ẢNH CHƯƠNG 1: TỔNG QUAN VỀ Laravel
Hình 1- 1 Màn hình tại trang chủ Laravel 6
Hình 1- 2 Kiểm tra phiên bản composer 6
Hình 1- 3 Các phiên bản trong Laravel 7
Hình 1- 4 Các phiên bản Laravel trên packagist.org 8
Hình 1- 5 Quá trình cài đặt Laravel 8
Hình 1- 6 Cấu trúc thư mục tổ chức code của Laravel 9
Hình 1- 7 Trang Hello World 12
Hình 1- 8 Bài tập 1 12
CHƯƠNG 2: ROUTING VÀ MIDDLEWARE Hình 2- 1 Kiến trúc middleware 21
CHƯƠNG 3: HIỆN THỰC MÔ HÌNH MVC Hình 3- 1 Kiến trúc tổng quan ứng dụng 42
CHƯƠNG 4: TƯƠNG TÁC DATABASE VỚI ELOQUENT ORM
Trang 7Hình 4- 2 Eloquent ORM tương tác với các model trong Laravel - Nguồn Dev.To 46
Hình 4- 3 Lược đồ cơ sở dữ liệu 58
CHƯƠNG 6: XÂY DỰNG WEBSITE Hình 6- 1 Tạo project trên trang Github 70
Hình 6- 2 Khởi tạo vendor 71
Hình 6- 3 Ví dụ file composer.json mẫu 72
Hình 6- 4 Cấu hình webhooks 73
Hình 6- 5 Xác nhận đăng ký từ trang Packagist 73
Trang 8GIÁO TRÌNH HỌC PHẦN Tên học môn học: Lập trình Back-End Web 2
Mã môn học: CNC107454
Vị trí, tính chất, ý nghĩa và vai trò của môn học:
- Vị trí: Đây là môn học được giảng dạy ở HK3, hệ cao đẳng ngành công nghệ thông tin
- Tính chất: Môn học này cung cấp thêm cho sinh viên kiến thức về các thư viện mã nguồn mở PHP nổi bật hiện nay, tìm hiểu chuyên sâu về thư viện Laravel
- Ý nghĩa và vai trò của môn học: Thông qua các hoạt động học tập sinh viên còn có thể hoàn thiện dần tính tư duy hệ thống và thói quen tuân thủ các quy định trong môi trường làm việc
Mục tiêu của môn học:
- Về kiến thức:
Phân tích được cách xây dựng một website theo hướng dẫn một cách đầy
đủ và hợp lý
- Về kỹ năng:
Xây dựng được một website ở mức nâng cao
Sử dụng các kỹ thuật được cung cấp bởi Laravel framework
- Về năng lực tự chủ và trách nhiệm:
Hình thành thói quen tư duy hệ thống, học tập tích cực, chủ động và thói quen tuân thủ các yêu cầu, quy định trong môi trường doanh nghiệp
Trang 9CHƯƠNG 1: TỔNG QUAN VỀ Laravel
Giới thiệuChương này trình bày các kiến thức liên quan đến các thư viện mã nguồn mở nổi bật hiện nay Bên cạnh đó cũng đưa ra cách đánh giá các framework, để từ đó chọn lựa được framework phù hợp cho dự án
Mục tiêu
Chọn lựa Laravel framework để tìm hiểu trong môn học này:
- Liệt kê được các thư viện mã nguồn mở nổi bật
- Đánh giá được ưu nhược điểm các framework
- Liệt kê được các tiêu chí để chọn lựa framework phù hợp
- Cài đặt được Laravel framework
- Sau khi học xong chương này, sinh viên có thể khởi tạo được dự án với Laravel hoặc với các framework khác
Trang 101.1 GIỚI THIỆU CÁC FRAMEWORK MÃ NGUỒN MỞ
Yêu cầu đối với môn học Lập trình Back-End Web 1 là người học phải tự hiện thực các tính năng đề ra Đối với môn Lập trình Back-End Web 2 yêu cầu người học phải tận dụng tối đa tài nguyên đã có (source code đã có) để hoàn thiện tính năng cần thực hiện trong website
Framework mã nguồn mở hiện nay đã có rất nhiều, được cung cấp một cách chính quy (gồm source code và tài liệu hướng dẫn) đã được rất nhiều lập trình viên chọn lựa để phát triển dự án Dưới đây là một số framework được đánh giá cao hiện nay:
có bộ tài liệu rất rõ ràng (những gì framework đã hiện thực) Yêu cầu người sử dụng framework phải nắm bắt được các điều này để tránh các sai sót
Bên cạnh những framework lớn như trên, cũng có 1 số thư viện vừa và nhỏ (chỉ viết một
số tính năng nào thôi: tính năng đăng nhập, tính năng quản lý bài viết, ):
lessphp (http://leafo.net/lessphp)
Savsoft Quiz(https://savsoftquiz.com)
Các framework mã nguồn mở có thể có thu phí hoặc không thu phí Thông thường các framework thực hiện các tính năng phổ dụng (thêm, xóa, sửa, bài viết) sẽ không thu phí Các framework thực hiện các tính năng chuyên sâu, tính năng nghiệp vụ khó, sẽ
Trang 11 phpFox (https://www.phpfox.com)
SocialEngine (https://www.socialengine.com)
1.2 ĐÁNH GIÁ ƯU NHƯỢC ĐIỂM CÁC FRAMEWORK
Trong phần trên (1.1), đã được mô tả một số framework Trong phần này sẽ thống kê một số ghi nhận (đánh giá) về framework trên
1.2.1 CodeIgniter FRAMEWORK
Đây là một trong những thư viện ra đời sớm (năm 2000), là nền tảng về ý tưởng thư viện
mã nguồn mở viết bằng PHP để xây dựng website Chính vì ra đời từ sớm nên xét về tính hữu dụng cho những dự án ngày nay CodeIgniter vẫn còn nhiều hạn chế, chưa đáp ứng đủ yêu cầu để xây dựng website Lý do vì sao, ngày nay có nhiều công ty vẫn sử dụng CodeIgniter vẫn tiếp tục dùng và phát triển? Chính vì, ngay từ đầu họ xây dựng trên nền CodeIgniter và đến ngày nay hệ thống vẫn hoạt động ổn định Chi phí để họ tiếp tục phát triển thấp hơn nhiều so với chi phí xây dựng website với thư viện mới và hiện đại
1.2.2 Zend FRAMEWORK
Thư viện Zend phát triển chủ yếu cung cấp các tính năng, nghiệp vụ mang tính chuyên sâu (nâng cao) Việc tiếp cận Zend sẽ khó khăn hơn nhiều so với các framework khác Zend cung cấp rất mạnh mẽ các tính năng liên kết với các đơn vị khác như: Facebook, Amazon, Google,
1.2.3 Laravel FRAMEWORK
Laravel ra đời tương đối “muộn” hơn so với các framework khác Chính vì vậy có điểm lợi và nhược Điểm lợi: khắc phục các nhược điểm của các framework khác, mang tính hiện đại Điểm nhược: các dự án tiếp cận Laravel còn chưa nhiều
1.2.4 Symfony FRAMEWORK
Tương tự như Zend Tuy nhiên, Laravel lại được xây dựng trên nền tảng của Symfony
Do vậy trong source code của Laravel hiện tại vẫn đang sử dụng 1 số vendor từ Symfony
Trang 121.3 CÁC TIÊU CHÍ ĐỂ CHỌN LỰA FRAMEWORK PHÙ
HỢP
Thông thường để hoàn thiện một website cần có một đội ngũ nhân sự hoạt động trong các lĩnh vực như: phân tích yêu cầu khách hàng, thiết kế đồ họa, thiết kế web, thiết kế database, phát triển code Chính vì vậy việc chọn lựa framework phù hợp phụ thuộc rất nhiều vào đội ngũ nhân sự phát triển code Họ có thật sự nắm vững framework cần dùng hay không?
Như đã đề cập ở trên, một trong những điểm nổi bật của framework là tài liệu hướng dẫn Đã là framework cung cấp trên internet một cách chính quy (mang tính chuyên nghiệp) thì đều phải có tài liệu hướng dẫn kèm theo Trong tài liệu hướng dẫn, framework sẽ mô tả rất rõ các tính năng đã hiện thực Từ đây, dựa vào tính năng dự án
và tính năng framework cung cấp nhà phát triển phần mềm sẽ có sự chọn lựa phù hợp nhất, giảm chi phí nhất Chọn lựa dựa trên tiêu chí: framework đã hiện thực nhiều tính năng trong dự án nhất
Bên cạnh đó, tiêu chí về sự nổi bật cũng đóng vai trò quan trọng Kiểm tra ý kiến đóng góp từ cộng đồng mạng về framework dự kiến sử dụng (tích cực/tiêu cực) Qua đó để nắm được tình hình của framework như: framework có bị nhiều lỗi hay không? Hỗ trợ
từ framework có chuyên nghiệp không?
1.4 TÌM HIỂU VỀ LARAVEL
Laravel ra đời trong những năm gần đây (2010), chính vì vậy những đặc điểm nổi bật của một framework hiện đại đều có trong Laravel Việc tiếp cận Laravel lúc đầu có rất nhiều cách, tài liệu này được trình bày theo cách thủ công
Chú ý rằng: Laravel hiện tại có phiên bản LTS và không phải LTS Khi sử dụng phiên bản LTS, thời gian hỗ trợ vá lỗi và bảo mật có thời gian kéo dài hơn từ đội ngũ phát triển Laravel
1.4.1 CẤU HÌNH LARAVEL
Yêu cầu phiên cấu hình hệ thống
Trang 13Với các phần mềm trên, cần chú ý kiểm tra phiên bản PHP để đáp ứng yêu cầu Gợi ý:
sử dụng hàm phpinfo() để kiểm tra phiên bản PHP
Như đã nói, việc cài đặt Laravel có nhiều cách Tài liệu sẽ hướng dẫn cách thủ công như sau:
Download phiên bản Laravel tại nguồn thư viện của Khoa CNTT
Tạo project có tên web2, đây là nơi lưu trữ source code Laravel
Mở trình duyệt với url: http://localhost/web2 Kết quả như màn hình sau:
Trang 14Hình 1- 1 Màn hình tại trang chủ Laravel
Ngoài ra, Laravel hỗ trợ cách cài đặt thông qua composer Composre là một phần mềm
hỗ trợ trong việc quản lý các thư viện trong PHP mà ứng dụng cần sử dụng Cách thức thực hiện được tiến hành thông qua command line
Dùng command line điều hướng đến vị trí cần tạo project
Hình 1- 2 Kiểm tra phiên bản composer
Như hình trên, dự án sẽ được thiết lập tại: D:\79-laravel\1-auth\5-laravel-56
Thực hiện câu lệnh command line: composer –version để kiểm tra phiên bản của
composer
Laravel hiện tại đã trải qua nhiều phiên bản Mặc định khi cài đặt Laravel thông qua composer, phiên bản mới nhất của Laravel sẽ được thiết lập
Trang 15Ví dụ tạo dự án có tên blog
Để chỉ định rõ phiên bản của Laravel
Danh sách các phiên bản của Laravel được mô tả tại trang
https://laravel.com/docs/master/releases
Hình 1- 3 Các phiên bản trong Laravel
Mặc định khi thực hiện cài đặt thông qua composer Source code Laravel sẽ được tải
về từ trang https://packagist.org Tại trang này sẽ mô tả chi tiết hơn các phiên bản của Laravel
composer create-project prefer-dist laravel/laravel blog
composer create-project prefer-dist laravel/laravel blog "5.5.*"
Trang 16Hình 1- 4 Các phiên bản Laravel trên packagist.org
Khi thực hiện câu lệnh trên, source code của Laravel sẽ được tạo
Hình 1- 5 Quá trình cài đặt Laravel
Khi download trực tiếp source code từ https://github.com/ hay https://packagist.org/ sẽ
không được đầy đủ như hai cách cài đặt được mô tả trên, vì mặc định các vendor sẽ
không có
Để tạo các vendor, composer cung cấp câu lệnh composer install
Ngoài ra, để thiết lập tính sẵn sàng sử dụng các vendor trong Laravel, composer cung cấp câu lệnh composer dump-autoload
Trang 171.4.2 GIỚI THIỆU VỀ CẤU TRÚC ỨNG DỤNG
Sau khi khởi tạo Laravel thành công (chỉ cài đặt, truy cập http://localhost/web2 thành công) Cấu trúc thư mục được mô tả như hình sau:
Hình 1- 6 Cấu trúc thư mục tổ chức code của Laravel
Giải thích
(1) Nơi lưu trữ các file sẽ tiếp tục phát triển
(2) Nơi lưu trữ các thư viện chính của Laravel Đây xem như “quả tim” của Laravel (3) Các file cài đặt thêm Chú ý có những file (ví dụ: env, htaccess) chỉ có phần mở rộng, rất hay gặp lỗi trên Windows (vì trên Windows yêu cầu file phải có tên)
Giải thích thêm
Trang 18Ý niệm trong lập trình với framework: “hạn chế sửa những gì framework đã làm”, chính nhờ đó việc nâng cấp phiên bản sẽ gặp nhiều thuận lợi Các thư viện trong vendor không nên chỉnh sửa Đây chính là lý do vì sao khi download source Laravel từ một số trang không có phần vendor
1.4.3 VIẾT CHƯƠNG TRÌNH HELLO WORLD TRONG Laravel
Khi tiếp cận bất cứ một chương trình mới, chương trình “Hello World” luôn là chương trình đầu tiên cần phải hiện thực
Hướng dẫn viết chương trình “Hello World” bằng Laravel
Tại file : *\web2 \routes\web.php, thêm dòng code sau:
Tại nơi lưu trữ: *\web2\resources\views, tạo file helloworld.blade.php với nội dung là mã HTML Ví dụ:
Route::get('/helloworld', function () {
return view('helloworld');
});
Trang 19<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>Hello World</title>
Trang 20Hình 1- 7 Trang Hello World
1.5 BÀI TẬP
Bài 1: Tạo trang với đường dẫn sau: http://localhost/web2/tdc với Laravel
Hình minh họa:
Hình 1- 8 Bài tập 1
Sử dụng tài nguyên cung cấp lab1-1.zip
Giao diện thực tế: http://fit.tdc.edu.vn/chuyen-de
Bài 2: Tiếp cận các thư viện khác
Cách thức tiến hành: thực hiện theo nhóm Mỗi nhóm thực hiện đầy đủ các thư viện
sau
a) Tiếp cận thư viện CodeIgniter 4(CI4) như cách tiếp cận Laravel
Trang 21a1) Tạo trang như mô tả tại Bài 1 bằng CI4 Download source tại:
https://www.codeigniter.com/
a2) Đưa ra nhận xét về cách tiếp cận framework nói chung (cài đặt, tài liệu, cấu trúc thư mục)
b) Tiếp cận thư viện Symfony 5 như cách tiếp cận Laravel
b1) Tạo trang như mô tả tại Bài 1 bằng Symfony 5 Download source tại: https://symfony.com/
b2) Đưa ra nhận xét về cách tiếp cận framework nói chung (cài đặt, tài liệu, cấu trúc thư mục)
c) Tiếp cận thư viện Zend Framework 3 như cách tiếp cận Laravel
c1) Tạo trang như mô tả tại Bài 1 bằng Zend Framework 3 Download source tại: https://symfony.com/
c2) Đưa ra nhận xét về cách tiếp cận framework nói chung (cài đặt, tài liệu, cấu trúc thư mục)
Trang 22CHƯƠNG 2: ROUTING VÀ MIDDLEWARE
Giới thiệuQuản lý tất cả yêu cầu truy cập từ người dùng vào ứng dụng, xử lý yêu cầu hợp lệ cũng như ngăn chặn truy cập không hợp lệ và trả kết quả về cho người dùng:
- Sử dụng routing để định nghĩa các yêu cầu truy cập
- Sử dụng middleware để xác định quyền hạn các yêu cầu truy cập
Mục đích
- Khai báo được các dạng routing, middleware
- Đăng ký được các dạng middleware
- Hiện thực được các middleware cơ bản
Trang 232.1 KHAI BÁO ROUTING
2.1.1 TÙY BIẾN TRONG ROUTING
Có thể hiểu routing là nơi điều hướng của ứng dụng, nơi định nghĩa tất cả các yêu cầu truy cập thông qua đường dẫn từ người dùng
Sử dụng các định nghĩa sau để diễn đạt cho các ví dụ mô tả trong giáo trình
Source code Laravel được lưu trữ tại thư mục www (ví dụ: */www/ltw2)
Truy cập http://laravel.local (hoặc http://localhost:82/ltw2) để vào trang Laravel Welcome
Truy cập http://laravel.local/helloworld (hoặc
http://localhost:82/ltw2/helloworld) để vào trang helloworld
Ví dụ đơn giản về khai báo routing
Giải thích ví dụ trên
(1) Route: là một lớp trong Laravel
(2) Hai dấu hai chấm (::): đây là cú pháp gọi hàm static của một lớp
(3) get: tên hàm static
(4) foo: là thông số truyền vào của hàm, cụ thể đây là địa chỉ truy cập
(http://laravel.local/foo hoặc http://localhost:82/ltw2/foo)
(5) function() {…}: là thông số truyền vào của hàm, cụ thể đây là 1 hàm
Với ví dụ trên, kết quả in ra màn hình sẽ là chuỗi “Hello World”
Route::get('foo', function () {
return 'Hello World';
});
Trang 24Việc định nghĩa các routes sẽ được khai báo trong các file: routes/web.php hoặc routes/api.php Các file này sẽ được load tự động trong chương trình
Bên cạnh hàm get trong lớp Route ở trên Laravel còn cung cấp thêm các phương thức
khác:
Trong đó $uri và $callback có thể hiểu như ví dụ mô tả ở trên
Cú pháp sử dụng biến trong định nghĩa tham số địa chỉ truy cập
Giải thích: name là tên biến sẽ nhận giá trị được gán sau tên user Ví dụ:
http://laravel.local/user/var_name, lúc này name sẽ nhận giá trị là var_name Giá trị
này sẽ được truyền vào tham số $name của hàm
Một số trang trong một website như: trang chủ, trang chi tiết, trang danh sách, trang tìm kiếm, trang liên hệ, … sẽ có các route tương ứng cần được khai báo Chính vì vậy
1 website sẽ có rất nhiều routes (tính cả các route cho ban quản trị) Để phân biệt giữa các route, cũng như nhằm mục đích quản lý tốt hơn, Laravel cho phép đặt tên cho route như sau:
Route::get('user/{name?}', function ($name = null) {
Trang 25Với ví dụ trên, profile là tên gọi của route với đường dẫn là user/profile
Cụ thể sử dụng profile trong trường hợp như gán link vào 1 đường dẫn, gọi thông tin đường dẫn ở ví dụ trên như sau:
Laravel còn cho phép gán giá trị thông qua tên gọi của route như sau:
2.1.2 VÍ DỤ MINH HỌA
Mô tả dữ liệu sử dụng trong các ví dụ sau
http://laravel.local (tương tự như http://localhost:82/ltw2)
Ví dụ 1: Khai báo địa chỉ http://laravel.local/helloworld cho trang Hello World
});
Trang 26Ví dụ 2: Khai báo địa chỉ http://laravel.local/luu-bai-viet cho trang Lưu bài viết
Ví dụ 3: Khai báo địa chỉ http://laravel.local/xoa-bai-viet cho trang Xóa bài viết
Chú ý: Có thể dùng Route::get() để định nghĩa cho tất cả các địa chỉ, tuy nhiên theo như
RESTful API việc cụ thể hóa thao tác (post, delete, …) giúp hệ thống phân loại thao tác cũng như dễ tương thích với các hệ thống hiện đại trên thế giới
Ví dụ 4: Khai báo địa chỉ http://laravel.local/sua-bai-viet/id cho trang Sửa bài viết theo
id của bài viết
Route::delete('xoa-bai-viet', function () { return 'Hello World';
});
Route::post('luu-bai-viet', function () { return 'Hello World';
});
Route::put('sua-bai-viet/{id}', function ($id) {
return 'Sửa bài viết có id = '.$id;
});
Trang 27Ví dụ 5: Khai báo địa chỉ http://laravel.local/sua-bai-viet cho trang: nếu có kèm theo
id thì tạo trang Sửa bài viết, ngược lại thì tạo trang Thêm mới bài viết
Ví dụ 6: Với khai báo như ví dụ 5, khi truy cập địa chỉ viet/10 thì id = 10, vậy khi truy cập địa chỉ http://laravel.local/sua-bai-viet/abc thì id = abc Lúc này chương trình có thể bị lỗi vì id có giá trị là số nguyên dương trong khi abc
http://laravel.local/sua-bai-là chuỗi Để xử lý trường hợp này Laravel tích hợp biểu thức chính quy (regular expression – RE) vào khai báo biến trong route Định nghĩa như sau:
[0-9]+ : giá trị là số nguyên dương Ví dụ: 23423, 2342, 000123, …
[a-z]+ : giá trị là chuỗi Ví dụ: abc, xyzabc, …
Cải tiến ví dụ 5 như sau:
Route::put('sua-bai-viet/{id?}', function ($id = null) {
Trang 282.2 KHAI BÁO MIDDLEWARE
2.2.1 ĐĂNG KÝ MIDDLEWARE VỚI HỆ THỐNG
Địa chỉ truy cập vào ứng dụng được khai báo trong routes, bất cứ người dùng nào cũng
có quyền truy cập vào địa chỉ đã được khai báo Ứng dụng phải xử lý các yêu cầu từ người dùng
Nhằm giảm tải cho việc xử lý yêu cầu trong ứng dụng, Laravel đưa ra middleware để
“tiền xử lý” các yêu cầu từ người dùng Ví dụ: kiểm tra người dùng có đăng nhập hay chưa, kiểm tra quyền hạn của người dùng có được phép truy cập hay không? Như mô
tả trong ví dụ, tất cả có thể được viết trong ứng dụng.Tuy nhiên việc này khiến chương trình khó tái sử dụng được code, cũng như ứng dụng “nở to” ra, gặp khó khăn trong bảo trì và nâng cấp
Route::put('sua-bai-viet/{id?}', function ($id = null) {
Trang 29Hình 2- 1 Kiến trúc middleware
Như hình trên, tất cả các request đều đi qua middleware trước khi vào ứng dụng Tuy nhiên trong ứng dụng có thể không có middleware
Middleware thực chất là một lớp phải được khai báo theo mẫu do Laravel quy định Ví
dụ sau minh họa khai báo một middleware kiểm tra tuổi người truy cập vào website
Trang 30Nơi lưu trữ middleware thường là: app/Http/Middleware Yêu cầu class phải có cấu
trúc như trên, nội dung được phép thay đổi được tô đậm, in nghiêng
Cụ thể, cấu trúc một file class được sử dụng làm middleware phải có cú pháp như sau:
Thông thường middleware là tập hợp những class, mỗi class xử lý một trường hợp nào
đó Và nội dung hiện thực từng class thường ngắn Tất cả các middleware muốn tích hợp phải đăng ký với hệ thống
Nơi đăng ký các middleware được khai báo trong app/Http/Kernel.php tại mục
\Illuminate\Routing\Middleware\ThrottleRequests::class,
Trang 31Chỉ số trong mảng $routeMiddleware là tên của middleware được đăng ký với hệ thống Giá trị mô tả lớp middleware đã hiện thực
2.2.2 TÙY BIẾN TRONG MIDDLEWARE
Sau khi định nghĩa middleware và đăng ký vào hệ thống Middleware có thể sử dụng
Cú pháp sử dụng được tích hợp với khai báo route như sau:
Ví dụ 1: khai báo địa chỉ admin/profile sử dụng middleware auth
Route::get('admin/profile', function () {
Trang 32Ví dụ 2: khai báo địa chỉ admin/profile sử dụng 2 middleware auth, see
Trong ví dụ 2, một địa chỉ có thể có nhiều middleware Trong trường hợp này có thể gom nhóm các middleware với nhau Laravel gom nhóm các middleware bằng cách khai báo trong biến $middlewareGroups trong file app/http/Kernel.php như sau:
Khi đó, cách sử dụng middleware group như những middleware đơn lẻ khác
Ví dụ: Đăng ký nhóm middleware vào routing
\Illuminate\View\Middleware\ShareErrorsFromSession::class, ],
Trang 332.3 BÀI TẬP
Bài 1: Tại file routes/web.php, tạo các route với các yêu cầu sau:
a) Trang chủ web Khoa CNTT (http://fit.tdc.edu.vn/) sử dụng controller HomeController, phương thức index, route có tên home
b) Trang tin tức web Khoa CNTT (http://fit.tdc.edu.vn/tin-tuc) sử dụng controller NewsController, phương thức index, route có tên news
c) Trang nhân sự web Khoa CNTT (http://fit.tdc.edu.vn/nhan-su) sử dụng controller ProController, phương thức index, route có tên pro
d) Sửa thông tin 1 bài viết trong web khoa CNTT, id chỉ có số Thông tin còn lại
tự định nghĩa
e) Sửa thông tin 1 bài viết trong web khoa CNTT, id gồm có số và ký tự (a->z,
A->Z) Thông tin còn lại tự định nghĩa
Bài 2: Tạo các middleware với các yêu cầu sau:
a) Hãy định nghĩa middleware cho trang admin web Khoa CNTT, khi muốn truy cập vào trang admin phải bắt buộc đăng nhập Middleware có tên auth
b) Hãy định nghĩa middleware cho trang admin web Khoa CNTT, khi muốn xem tin tức, xem trang nhân sự, sửa thông tin 1 bài viết trong web khao CNTT
Trang 34CHƯƠNG 3: HIỆN THỰC MÔ HÌNH MVC
Giới thiệuMVC là mẫu thiế kế phần mềm (design pattern) phổ dụng ngày nay, việc thiết kế phần mềm theo hướng MVC giúp hệ thống hoạt động ổn định, dễ nâng cấp, bảo trì và phát triển sau này:
- Laravel cung cấp các thư viện xây dựng phần mềm theo hướng MVC
- Model quản lý, xử lý dữ liệu trong hệ thống
- View hiển thị dữ liệu đến người dùng
- Controller xử lý các yêu cầu từ người dùng
Mục đích
- Khởi tạo được mô hình MVC trong Laravel
- Đăng ký được controller với routing
- Cấu hình và truy vấn được database
- Hiển thị được giao diện với blade template
Trang 36+ CONTROLLER: tên controller chịu trách nhiệm xử lý
+ METHOD: là một phương thức trong controller, xử lý yêu cầu
Ví dụ 1: Khai báo route với phương thức PUT
Như vậy việc khai báo đã được thực hiện, để nhận được các giá trị truyền vào Tại controller cần khai báo các biến để nhận giá trị truyền vào, mỗi giá trị nhập vào tương ứng với một biến có kiểu dữ liệu tương ứng
Ví dụ 2: Khai báo controller xử lý route tương ứng
Tìm hiểu về lớp Illuminate\Http\Request, lớp này cung cấp nhiều phương thức tiện ích trong quá trình phát triển
Ví dụ: Khi thực hiện 1 request: http://laravel.local/foo/bar
Trang 37Để lấy thông tin đường dẫn truyền vào, mong muốn trả về: foo/bar thì sử dụng phương thức path()
3.1.2 MỘT SỐ PHƯƠNG THỨC TRONG Illuminate\Http\Request
STT Tên phương thức Mô tả phương thức
1 path() Trả về đường dẫn của request
2 is(‘duong_dan_kiem_tra’) Kiểm tra đường dẫn truyền vào có phải
là đường dẫn cần kiểm tra không
3 url() Trả về đường dẫn không bao gồm các
biến truyền vào (query string)
4 fullUlr() Trả về đường dẫn gồm cả biến truyền
vào
5 isMethod(‘phuong_thuc’) Kiểm tra có phải là các phương thức cần
kiểm tra không Một số phương thức như: GET, PUT, POST, …
6 all() Trả về các giá trị input đã truyền vào
7 input(‘ten_bien’) Chỉ lấy giá trị truyền vào biến ten_bien
Trang 383.2 TƯƠNG TÁC TRÊN CONTROLLER
3.2.1 GIỚI THIỆU
Theo mẫu thiết kế phần mềm (design pattern) MVC MVC chia ứng dụng thành 3 phần tương tác được với nhau, mỗi phần đảm nhận vai trò khác nhau Khi sử dụng đúng cách, mẫu MVC giúp cho người phát triển phần mềm tách biệt các luồng xử lý Giúp cho hệ thống rõ ràng hơn, dễ xử lý, dễ nâng cấp và phát triển hơn
Controller đảm nhận xử lý các yêu cầu và trả kết quả về cho người dùng, trong 1 ứng dụng thường có nhiều controller Trong Laravel, ở mức độ cơ bản các controller được lưu trữ tại app/Http/Controllers
Tên controller được đề nghị đặt như sau: NAMEController, ví dụ: UserController, StudentController, … Có hậu tố là Controller Tên controller là tên class và tên file
Ví dụ 1: minh họa 1 controller cơ bản, controller này được lưu trong file
UserController.php
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class UserController extends Controller{
public function show($id){
//TODO: Write your code here
}
}
Trang 39Để điều hướng yêu cầu người dùng về đúng controller phải thông qua route Cú pháp đăng ký như sau:
Route::get('ROUTE_ADDRESS', 'CONTROLLER_CLASS_NAME@FUNCTION_NAME');
Trang 40Ví dụ 2: khai báo địa chỉ http://laravel.local/user/USER_ID được xử lý trong controller UserController, hàm show thực hiện xử lý
3.2.2 TÙY BIẾN TRONG CONTROLLER
Laravel đề nghị các controller được lưu trữ trong thư mục: App\Http\Controllers Nếu controller được đặt trong thư mục con của App\Http\Controllers thì khai báo trong route như sau:
Chú ý rằng, Laravel được thiết kế trên ý tưởng tận dụng tối đa nguồn tài nguyên từ cộng đồng lập trình viên trên thế giới, Laravel cho phép các lập trình viên “tiêm chích” vào
hệ thống Cụ thể, đó chính là các vendor Các vendor được thiết kế tách biệt với Laravel, kết nối với Laravel thông qua một số khai báo Chính vì vậy, các controller không hẳn
là phải đặt trong thư mục App\Http\Controllers mà còn có thể được đặt trong các vendor
Single Action Controller là controller đặc biệt trong Laravel, chỉ đảm nhận đúng 1 hàm tính năng xử lý yêu cầu từ người dùng Tất cả xử lý được đặt bên trong hàm invoke()
class NAMEController extends Controller{
public function invoke(){
//TODO: Write your code here }
}