TỔNG QUAN VỀ Laravel
GIỚI THIỆU CÁC FRAMEWORK MÃ NGUỒN MỞ
Môn học Lập trình Back-End Web 1 yêu cầu người học tự thực hiện các tính năng được đề ra, trong khi đó, môn Lập trình Back-End Web 2 yêu cầu người học tận dụng tối đa tài nguyên có sẵn, cụ thể là source code, để hoàn thiện các tính năng cần thiết cho website.
Hiện nay, có rất nhiều framework mã nguồn mở được cung cấp chính quy, bao gồm cả mã nguồn và tài liệu hướng dẫn, giúp lập trình viên dễ dàng lựa chọn để phát triển dự án Dưới đây là một số framework được đánh giá cao trong cộng đồng lập trình viên.
CodeIgniter (https://www.codeigniter.com)
Zend (http://www.zend.com)
Khi sử dụng một framework, nhà phát triển phần mềm cần tận dụng tối đa các tính năng có sẵn và hạn chế viết lại những chức năng đã được framework cung cấp Các framework thường đi kèm với tài liệu hướng dẫn rõ ràng, vì vậy người dùng cần nắm vững thông tin này để tránh sai sót trong quá trình phát triển.
Ngoài các framework lớn, còn tồn tại nhiều thư viện nhỏ hơn, chuyên biệt cho một số tính năng cụ thể như đăng nhập hay 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ể miễn phí hoặc thu phí Thường thì những framework cung cấp các tính năng cơ bản như thêm, xóa, sửa bài viết sẽ không tính phí Ngược lại, những framework với tính năng chuyên sâu và nghiệp vụ phức tạp thường sẽ có phí sử dụng Ví dụ, một số framework yêu cầu thu phí bao gồm
phpFox (https://www.phpfox.com)
SocialEngine (https://www.socialengine.com)
ĐÁ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
Thư viện Zend chủ yếu tập trung vào việc cung cấp các tính năng chuyên sâu và nghiệp vụ nâng cao, khiến cho việc tiếp cận Zend trở nên khó khăn hơn so với các framework khác Bên cạnh đó, Zend cũng hỗ trợ mạnh mẽ việc tích hợp với các nền tảng lớn như Facebook, Amazon, và Google.
Laravel ra đời sau nhiều framework khác, mang đến cả lợi ích và nhược điểm Lợi thế của Laravel là khắc phục các hạn chế của những framework trước đó và sở hữu tính năng hiện đại Tuy nhiên, nhược điểm là số lượng dự án áp dụng Laravel vẫn còn hạn chế.
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.
CÁC TIÊU CHÍ ĐỂ CHỌN LỰA FRAMEWORK PHÙ HỢP
Để hoàn thiện một website, cần có đội ngũ nhân sự chuyên môn 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ế cơ sở dữ liệu và phát triển mã Việc lựa chọn framework phù hợp phụ thuộc nhiều vào khả năng của đội ngũ phát triển mã, đặc biệt là kiến thức và sự thành thạo của họ với framework đó.
Một trong những điểm nổi bật của framework là tài liệu hướng dẫn, điều này giúp người dùng hiểu rõ các tính năng đã được hiện thực hóa Mỗi framework chuyên nghiệp đều đi kèm với tài liệu chi tiết, từ đó nhà phát triển phần mềm có thể lựa chọn tính năng phù hợp nhất cho dự án của mình Việc lựa chọn này không chỉ giúp giảm chi phí mà còn đảm bảo rằng framework đã cung cấp nhiều tính năng hữu ích cho dự án.
Tiêu chí nổi bật là yếu tố quan trọng trong việc đánh giá framework Cần kiểm tra ý kiến từ cộng đồng mạng về framework dự kiến sử dụng, bao gồm cả phản hồi tích cực và tiêu cực Điều này giúp nắm bắt tình hình thực tế của framework, như mức độ lỗi phát sinh và chất lượng hỗ trợ từ framework có chuyên nghiệp hay không.
TÌM HIỂU VỀ LARAVEL
Laravel, được ra mắt vào năm 2010, sở hữu nhiều đặc điểm nổi bật của một framework hiện đại Việc tiếp cận Laravel có thể thực hiện qua nhiều phương pháp khác nhau, và tài liệu này sẽ được trình bày theo cách thủ công để người dùng dễ dàng nắm bắt.
Laravel hiện có hai phiên bản: LTS và không phải LTS Phiên bản LTS được hỗ trợ lâu dài hơn, với thời gian bảo trì và cập nhật bảo mật kéo dài từ đội ngũ phát triển Laravel.
Yêu cầu phiên cấu hình hệ thống
Khi sử dụng trên Windows thường sử dụng các phần mềm sau:
Vớ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:
Hình 1- 1 Màn hình tại trang chủ Laravel
Laravel hỗ trợ cài đặt thông qua Composer, một phần mềm quản lý thư viện cho PHP Việc cài đặt được thực hiện dễ dàng thông qua dòng lệnh.
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
Ví 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.*"
Hì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 tải trực tiếp mã nguồn từ https://github.com/ hoặc https://packagist.org/, bạn sẽ không có đầy đủ các thành phần như khi cài đặt qua các phương pháp khác, vì mặc định các thư viện (vendor) sẽ không được bao gồm Để tạo ra các thư viện này, bạn cần sử dụng 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
1.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
(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
When installing additional files, it's important to note that certain files, such as env and htaccess, may only have an extension This can lead to frequent errors on Windows, as the operating system requires files to have a designated name.
Trong lập trình với framework, việc hạn chế sửa đổi những gì mà framework đã thiết lập là rất quan trọng, giúp việc nâng cấp phiên bản trở nên dễ dàng hơn Các thư viện trong thư mục vendor không nên bị chỉnh sửa, vì điều này sẽ gây khó khăn cho quá trình bảo trì và nâng cấp Đây cũng chính là lý do mà khi tải source code Laravel từ một số trang, người dùng thường không tìm thấy thư mục 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');
Truy cập: http://localhost/web2/helloword
Hello World
body { text-align: center; margin-top: 10%;
BÀI TẬP
Bài 1: Tạo trang với đường dẫn sau: http://localhost/web2/tdc với Laravel
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
Để thực hiện bài tập theo nhóm, mỗi nhóm cần làm quen với ba thư viện chính: đầu tiên là CodeIgniter 4 (CI4), trong đó nhóm sẽ tạo trang như mô tả tại Bài 1 và đưa ra nhận xét về cài đặt, tài liệu và cấu trúc thư mục của framework Tiếp theo, nhóm sẽ tiếp cận Symfony 5 theo cách tương tự, tạo trang và đánh giá các yếu tố liên quan Cuối cùng, nhóm sẽ làm việc với Zend Framework 3, thực hiện việc tạo trang và đưa ra nhận xét về cách tiếp cận framework này Tài nguyên để tải xuống các thư viện được cung cấp tại các liên kết tương ứng.
ROUTING VÀ MIDDLEWARE
KHAI BÁO 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
(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';
Các routes được định nghĩa trong các tệp routes/web.php hoặc routes/api.php, và các tệp này sẽ được tự động tải 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
Trong đoạn mã, "name" là tên biến nhận giá trị được gán sau "user" Ví dụ, trong đường dẫn http://laravel.local/user/var_name, biến "name" sẽ nhận giá trị "var_name" Giá trị này sẽ được truyền vào tham số $name của hàm.
Trong một website, các trang như trang chủ, trang chi tiết, trang danh sách, trang tìm kiếm và trang liên hệ cần được khai báo các route tương ứng để hoạt động hiệu quả.
Trong một website, sẽ có nhiều route, bao gồm cả các route dành cho ban quản trị Để phân biệt và quản lý hiệu quả các route này, Laravel cho phép người dùng đặt tên cho từng route.
Route::get('user/{name?}', function ($name = null) { return $name;
Route::get('user/profile', function () { //
Vớ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:
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
// Generating Redirects return redirect()->route('profile');
Route::get('user/{id}/profile', function ($id) { //
Route::get('helloworld', function () { return 'Hello World';
Ví 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 giúp cụ thể hóa các thao tác như post, delete, và phân loại chúng, từ đó nâng cao khả năng tương thích với các hệ thống hiện đại trên toàn cầu.
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;
Khi khai báo địa chỉ http://laravel.local/sua-bai-viet, nếu có tham số id, hệ thống sẽ tạo trang Sửa bài viết; ngược lại, nếu không có id, trang Thêm mới bài viết sẽ được tạo.
Khi truy cập địa chỉ http://laravel.local/sua-bai-viet/10, id được gán giá trị 10, nhưng nếu truy cập http://laravel.local/sua-bai-viet/abc, id sẽ nhận giá trị là chuỗi "abc" Điều này có thể gây lỗi do id yêu cầu phải là số nguyên dương Để xử lý tình huống này, Laravel đã tích hợp biểu thức chính quy vào khai báo biến trong route.
[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) { if ($id) { return 'Sửa bài viết có id = '.$id;
Return 'Thêm mới bài viết';
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 là một bước quan trọng, bao gồm việc kiểm tra trạng thái đăng nhập và quyền truy cập của người dùng Mặc dù có thể thực hiện tất cả các kiểm tra này trong ứng dụng, nhưng điều này có thể làm cho mã nguồn trở nên khó tái sử dụng và khiến ứng dụng trở nên cồng kềnh, gây khó khăn trong việc bảo trì và nâng cấp.
Route::put('sua-bai-viet/{id?}', function ($id = null) { if ($id) { return 'Sửa bài viết có id = '.$id;
Return 'Thêm mới bài viết';
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 là một lớp cần được khai báo theo mẫu quy định của Laravel Ví dụ dưới đây minh họa cách khai báo một middleware để kiểm tra độ tuổi của người truy cập vào website.