Ôn tập: Trình xác thực biểu mẫu
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 69 trên 91.
Thử thách
DễHãy xây dựng một bộ xác thực biểu mẫu đăng ký người dùng, thu thập các lỗi xác thực và báo cáo tất cả cùng lúc, thay vì dừng lại ở lỗi đầu tiên. Đây là cách xác thực biểu mẫu trong thực tế hoạt động: người dùng muốn thấy mọi vấn đề trong nội dung gửi đi, chứ không phải sửa từng vấn đề một.
Bạn sẽ sắp xếp code trong bốn tệp:
ValidationException.php: Tạo lớp cơ sởValidationExceptionkế thừaException. Lớp này làm lớp cha cho mọi ngoại lệ liên quan đến xác thực.Exceptions.php: Nạp tệp ValidationException và tạo ba lớp ngoại lệ cụ thể kế thừaValidationException:RequiredFieldException: Nhận tên trường trong hàm khởi tạo và truyền thông báo"[fieldName] is required"cho lớp chaInvalidEmailException: Nhận chuỗi email trong hàm khởi tạo và truyền thông báo"'[email]' is not a valid email"cho lớp chaMinLengthException: Nhận tên trường và độ dài tối thiểu (int) trong hàm khởi tạo, rồi truyền thông báo"[fieldName] must be at least [minLength] characters"cho lớp cha
FormValidator.php: Nạp tệp Exceptions và tạo lớpFormValidatorvới các phương thức xác thực sau:validateRequired(?string $value, string $fieldName): string: NémRequiredFieldExceptionnếu giá trị là null hoặc rỗng (sau khi cắt khoảng trắng), nếu không thì trả về giá trị đã cắt khoảng trắngvalidateEmail(string $email): string: NémInvalidEmailExceptionnếu email không hợp lệ (dùngfilter_varvớiFILTER_VALIDATE_EMAIL), nếu không thì trả về emailvalidateMinLength(string $value, string $fieldName, int $minLength): string: NémMinLengthExceptionnếu độ dài chuỗi nhỏ hơn độ dài tối thiểu, nếu không thì trả về giá trị
main.php: Nạp tệp FormValidator. Bạn sẽ nhận ba đầu vào: tên người dùng, email và mật khẩu.Tạo một
FormValidatorvà một mảng rỗng để thu thập thông báo lỗi. Xác thực từng trường trong một khối try-catch riêng:- Xác thực tên người dùng là trường bắt buộc
- Trước tiên, xác thực email là trường bắt buộc, sau đó xác thực email đúng định dạng
- Trước tiên, xác thực mật khẩu là trường bắt buộc, sau đó xác thực mật khẩu có độ dài tối thiểu là 8 ký tự
Khi bắt một
ValidationException, hãy thêm thông báo của ngoại lệ vào mảng lỗi thay vì dừng chương trình.Sau khi hoàn tất mọi bước xác thực, nếu có lỗi, hãy in từng thông báo lỗi trên một dòng riêng. Nếu không có lỗi, hãy in
"Registration successful".
Cách thu thập mọi lỗi trước khi báo cáo này rất quan trọng để mang lại trải nghiệm tốt cho người dùng. Cấu trúc phân cấp ngoại lệ giúp bạn dễ dàng bắt mọi lỗi xác thực bằng một khối catch duy nhất, đồng thời vẫn giữ được các kiểu ngoại lệ cụ thể cho từng lỗi xác thực.
Tự làm thử
<?php
require_once 'FormValidator.php';
// Đọc dữ liệu đầu vào
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
// Tạo một instance của FormValidator
$validator = new FormValidator();
// Tạo một mảng rỗng để lưu các thông báo lỗi
$errors = [];
// TODO: Kiểm tra username là trường bắt buộc trong khối try-catch
// Bắt ngoại lệ ValidationException và thêm thông báo của nó vào mảng $errors
// TODO: Trước tiên kiểm tra email là trường bắt buộc, sau đó kiểm tra định dạng email hợp lệ
// Dùng khối try-catch và thêm mọi thông báo lỗi vào mảng $errors
// TODO: Trước tiên kiểm tra password là trường bắt buộc, sau đó kiểm tra độ dài tối thiểu là 8 ký tự
// Dùng khối try-catch và thêm mọi thông báo lỗi vào mảng $errors
// TODO: Sau khi hoàn tất mọi bước kiểm tra:
// - Nếu có lỗi, in mỗi thông báo lỗi trên một dòng riêng
// - Nếu không có lỗi, in "Registration successful"
?>Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh11Hệ thống kiểu dữ liệu và xử lý lỗi
Khai báo kiểu dữ liệuKiểu dữ liệu có thể nhận giá trị nullKiểu hợp và kiểu giaoCác lớp ngoại lệHệ thống phân cấp ngoại lệ tùy chỉnhTry, Catch, FinallyÔn tập: Trình xác thực biểu mẫu3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online