Tập 21: Validation Laravel (tiếp theo)(ok)
https://viblo.asia/p/tap-21-validation-laravel-tiep-theo-gAm5yGaAZdb
Last updated
Was this helpful?
https://viblo.asia/p/tap-21-validation-laravel-tiep-theo-gAm5yGaAZdb
Last updated
Was this helpful?
Mình rất vui vì được gặp lại các bạn trong tập ngày hôm nay. Ở tập trước chúng ta đã cùng nhau tìm hiểu khá nhiều về "Validation Laravel" rồi, nhưng hôm nay chúng ta vẫn sẽ tiếp tục nó, vì trong Laravel Docs, phần "Validation" khá là dài. Phần này quan trọng, vì thế các bạn không được bỏ qua đâu đấy.
Bên dưới là danh sách tất cả các validation rule có sẵn mà Laravel cung cấp.
Trường được xác thực phải có giá trị là "yes"
, "on"
, 1
hoặc true
. Hữu dụng khi tạo checkbox "Ghi nhớ đăng nhập" hoặc "Đồng ý điều khoản và dịch vụ"...
Cú pháp: accepted
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có bản ghi A hoặc AAAA hợp lệ theo dns_get_record
của PHP. Cái này theo mình biết thường dùng để kiểm tra tên miền đã được đăng ký hay chưa, các bạn có thể Google để tìm hiểu thêm. Thường áp dụng cho mấy website thuê tên miền, hosting...
Cú pháp: active_url
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có giá trị là một date hợp lệ, không liên quan theo hàm strtotime
của PHP.
Cú pháp: date
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải phù hợp với định dạng date đã cho. Bạn chỉ nên sử dụng một trong hai rule date
hoặc date_format
để xác định một trường, không phải cả hai.
Cú pháp: date_format:format
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có giá trị là date sau date đã cho. Date sẽ được chuyển vào strtotime
của PHP.
Cú pháp: after:date
HTML:
Validation rule:
Date format mặc định của Laravel là Y-m-d H:i:s
. Trước tiên sử dụng rule after:date
này, bạn có thể khai báo rule date_format
để định dạng lại date trong validation sao cho theo ý muốn.
Bạn có thể sử dụng các từ khóa thời gian như now
, tomorrow
...
Lưu ý: Nếu sử dụng các từ khóa thời gian này, framework sẽ tự động so sánh cả giờ, phút, giây.
hoặc một giá trị date cụ thể
Ngoài ra, bạn cũng có thể sử dụng giá trị của một input khác.
Thông báo mặc định:
Trường được xác thực phải có giá trị là date sau hoặc bằng date đã cho.
Cú pháp: after_or_equal:date
HTML:
Validation rule:
Hoàn toàn giống với rule after
.
Thông báo mặc định:
Trường được xác thực chỉ được chứa chữ cái.
Cú pháp: alpha
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực chỉ được chứa chữ cái và số, cũng như dấu -
và _
.
Cú pháp: alpha_dash
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực chỉ được chứa chữ cái và số.
Cú pháp: alpha_num
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có định dạng mảng PHP.
Cú pháp: array
Validation rule:
Thông báo mặc định:
Dừng validation rule input nếu thất bại tại rule trước đó.
Cú pháp: bail
Validation rule:
Trường được xác thực phải có giá trị là date trước date đã cho.
Cú pháp: before:date
HTML:
Validation rule:
Hoàn toàn giống với rule after
.
Thông báo mặc định:
Trường được xác thực phải có giá trị là date trước hoặc bằng date đã cho.
Cú pháp: before_or_equal:date
HTML:
Validation rule:
Hoàn toàn giống với rule after
.
Thông báo mặc định:
Trường được xác thực phải có kích thước nằm ở giữa hai giá trị min và max đã cho.
Chuỗi: dựa trên độ dài
Số: dựa trên độ lớn
Mảng: dựa trên phần tử
File: dựa trên kích thước (tính theo đơn vị KB)
Cú pháp: between:min,max
Validation rule:
Với chuỗi:
Với số cần lưu ý một chút, ta cần phải thêm rule number
để xác thực là số trước khi rule between
được kiểm tra.
Thông báo mặc định:
Trường được xác định phải ở dạng boolean, có thể chấp nhận true
, false
, 1
, 0
, "1"
và "0"
.
Cú pháp: boolean
HTML:
Validation rule:
Thông báo mặc định:
Trường foo
được xác thực phải khớp với trường foo_confirmation
. Chẳng hạn bạn muốn xác thực trường password
với rule confirmed
, trường password_confirmation
phù hợp (khớp với trường password
) phải có mặt trong request.
Cú pháp: confirmed
HTML:
Lưu ý: Tuân thủ cú pháp đặt tên cho input.
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có date bằng date đã cho. Date được chuyển vào hàm strtotime
của PHP.
Cú pháp: date_equals:date
HTML:
Validation rule:
Hoàn toàn giống với rule after
.
Thông báo mặc định:
Trường được xác thực phải có giá trị khác với trường đã cho.
Cú pháp: different:field
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là số và có độ dài bẳng độ dài đã cho.
Cú pháp: digits:length
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là số và có độ dài nằm trong khoảng min, max đã cho.
Cú pháp: digits_between:min,max
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là một ảnh và đáp ứng các ràng buộc về kích thước được chỉ định bởi các tham số của rule.
Cú pháp: dimensions:param_1,param_2,..param_n
HTML:
Validation rule: Có tất cả 7 loại tham số:
min_width
min_height
max_width
max_height
ratio
: giá trị tỉ lệ = chiều rộng / chiều cao hoặc bằng số float nào đó
width
height
Ngoài
ratio
, các tham số còn lại tính bằng đơn vị pixel.
Bạn có thể sử dụng Rule::dimensions
để dễ dàng truyền các biến trong việc khai báo validation rule.
Thông báo mặc định:
Khi làm việc với array, trường được xác thực không được có gí trị trùng lặp nào.
Cú pháp: distinct
Validation rule:
Thông báo mặc định:
rfc
: RFCValidator
strict
: NoRFCWarningsValidation
spoof
: SpoofCheckValidation
dns
: DNSCheckValidation
filter
: FilterEmailValidation
Mặc định Laravel sử dụng validator rfc
để validate. Với validator filter
, nó sử dụng method filter_var
để validate.
Cú pháp: email:validator
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải kết thúc bằng một trong các giá trị đã cho.
Cú pháp: ends_with:value_1,value_2,...value_n
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải chứa giá trị tồn tại trong cột của database table. Thường dùng để kiểm tra xem ID có tồn tại trước khi thực hiện sửa hoặc xóa...
Cú pháp: exists:table,column
HTML:
Validation rule:
Nếu column
không được chỉ định thì sẽ tự động lấy tên của trường đển gán cho column
.
Trường hợp khai báo column
:
Nếu ứng dụng của bạn sử dụng nhiều database connection, có thể sử dụng ký hiệu .
để tham chiếu theo ý muốn.
Mặc định thì rule này sẽ sử dụng câu truy vấn:
Nếu bạn muốn thay đổi thiết lập này, bạn có thể sử dụng method Rule::exists
:
Ta có thể sử dụng global helper request
để lấy dữ liệu từ input id
.
Thông báo mặc định:
Trường được xác thực phải là tệp đã upload thành công.
Cú pháp: file
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải lớn hơn trường đã cho. Hai trường phải cùng loại dữ liệu, bao gồm: chuỗi, số, mảng và file. Về quy ước so sánh tương tự như rule between
.
Cú pháp: gt:field
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải lớn hơn hoặc bằng trường đã cho. Hai trường phải cùng loại dữ liệu, bao gồm: chuỗi, số, mảng và file. Về quy ước so sánh tương tự như rule between
.
Cú pháp: gt:field
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là tệp ảnh, bao gồm các định dạng: jpeg, png, bmp, gif, svg, hoặc webp.
Cú pháp: image
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là một phần tử nằm trong mảng đã cho.
Cú pháp: in:item_1,item_2,...item_n
HTML:
Validation rule:
Mặc định:
Đôi khi sử dụng valiation rule còn khá nhiều hạn chế. Chính vì vậy, ta có thể sử dụng method Rule::in
để linh hoạt hơn.
Thông báo mặc định:
Trường được xác thực phải có giá trị thuộc các key của mảng. Thường để kiểm tra một giá trị có tồn tại trong multi-level array hay không.
Cú pháp: in_array:array.*
Dữ liệu:
hoặc
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là một số nguyên.
Chú ý: Kiểu dữ liệu có thể là chuỗi hoặc số, miễn có giá trị là số nguyên.
Cú pháp: integer
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải một địa chỉ IP. Bao gồm các loại:
ip
: Địa chỉ IP
ipv4
: Địa chỉ IPv4
ipv6
: Địa chỉ IPv6
Cú pháp:
ip
: Địa chỉ IP
ipv4
: Địa chỉ IPv4
ipv6
: Địa chỉ IPv6
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là một chuỗi JSON hợp lệ.
Cú pháp: json
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải nhỏ hơn trường đã cho. Hai trường phải cùng loại dữ liệu, bao gồm: chuỗi, số, mảng và file. Về quy ước so sánh tương tự như rule between
.
Cú pháp: lt:field
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải nhỏ hơn hoặc bằng trường đã cho. Hai trường phải cùng loại dữ liệu, bao gồm: chuỗi, số, mảng và file. Về quy ước so sánh tương tự như rule between
.
Cú pháp: lte:field
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải nhỏ hơn hoặc bằng giá trị lớn nhất cho trước, bao gồm: chuỗi, số, mảng và file. Về quy ước so sánh tương tự như rule between
.
Cú pháp: max:value
HTML:
Validation rule:
Thông báo mặc định:
File được xác thực phải khớp với một trong các MIME đã cho. Để xác thực được MIME của file, nội dung file sẽ được đọc và framework sẽ dự đoán loại MIME, điều này có thể khác với loại MIME cho người dùng cung cấp.
Cú pháp: mimetypes:text/plain,...
HTML:
Validation rule:
Thông báo mặc định:
Cú pháp: mimes:foo,bar...
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải lớn hơn hoặc bằng giá trị lớn nhất cho trước, bao gồm: chuỗi, số, mảng và file. Về quy ước so sánh tương tự như rule between
.
Cú pháp: min:value
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải không phải là một phần tử nằm trong mảng đã cho.
Cú pháp: not_in:item_1,item_2,...item_n
HTML:
Validation rule:
Mặc định:
Đôi khi sử dụng valiation rule còn khá nhiều hạn chế. Chính vì vậy, ta có thể sử dụng method Rule::notIn
để linh hoạt hơn.
Thông báo mặc định:
Trường được xác thực không được khớp với regular expression đã cho. Rule này bản chất sử dụng hàm preg_match
trong PHP, do đó cần chú ý đến các ký tự của chuỗi pattern.
Cú pháp: not_regex:pattern
HTML:
Validation rule:
Lưu ý: Nếu như trong chuỗi pattern có chứa ký tự
|
thì bạn có thể sử dụng mảng để liệt kê các validation rule.
Thông báo mặc định:
Trường được xác thực có thể nhận giá trị null
, nếu không thì phải tuân thủ các validation rule còn lại.
Cú pháp: nullable|other_rule|...
HTML:
Validation rule:
Trường được xác thực phải là một số.
Cú pháp: numeric
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có mặt trong request nhưng có thể trống.
Cú pháp: present
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải khớp với regular expression đã cho. Rule này bản chất sử dụng hàm preg_match
trong PHP, do đó cần chú ý đến các ký tự của chuỗi pattern.
Cú pháp: regex:pattern
HTML:
Validation rule:
Lưu ý: Nếu như trong chuỗi pattern có chứa ký tự
|
thì bạn có thể sử dụng mảng để liệt kê các validation rule.
Thông báo mặc định:
Trường được xác thực phải có mặt trong request và không được trống. Một trường được coi là trống nếu rơi vào các trường hợp sau:
Giá trị là null
.
Giá trị là mội chuỗi trống.
Giá trị là một mảng trống hoặc object Countable
trống (sẽ tìm hiểu ở các tập sau).
Giá trị là một file đã upload nhưng không tìm thấy đường dẫn.
Cú pháp: required
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có mặt trong request và không được trống nếu như một trường khác có giá trị bằng giá trị đã cho.
Cú pháp: required_if:anotherfield,value
HTML:
Validation rule:
Mặc định:
Ngoài ra bạn cũng có thể sử dụng method Rule::requiredIf
để linh hoạt hơn. Method này chấp nhận giá trị boolean hoặc một Closure object trả về gía trị boolean. Nếu là true
thì validation rule này sẽ được thực thi.
Thông báo mặc định:
Trường được xác thực phải có mặt trong request và không được trống trừ khi một trường khác có giá trị bằng giá trị đã cho.
Cú pháp: required_unless:anotherfield,value
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có mặt trong request và không được trống trừ nếu một trong các trường liệt kê có mặt trong request.
Cú pháp: required_with:foo,bar
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có mặt trong request và không được trống trừ nếu tất cả các trường liệt kê có mặt trong request.
Cú pháp: required_with_all:foo,bar
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có mặt trong request và không được trống trừ nếu một trong các trường liệt kê không có mặt trong request.
Cú pháp: required_without:foo,bar
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có mặt trong request và không được trống trừ nếu tất cả các trường liệt kê không có mặt trong request.
Cú pháp: required_without_all:foo,bar
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải khớp về giá trị và kiểu dữ liệu với trường đã cho.
Cú pháp: same:field
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có kích thước khớp với giá trị đã cho, bao gồm: chuỗi, số, mảng và file. Về quy ước so sánh tương tự như rule between
.
Cú pháp: size:field
HTML:
Validation rule:
Về hình thức tương tự như rule between
.
Thông báo mặc định:
Trường được xác thực phải bắt đầu bằng một trong các giá trị đã cho.
Cú pháp: starts_with:foo,bar,...
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là chuỗi. Nếu bạn muốn nó có giá trị null
, bạn cần phải khai báo thêm validation rule nullable
.
Cú pháp: string
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải là mội múi giờ hợp lệ theo hàm timezone_identifiers_list
của PHP.
Cú pháp: timezone
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực không được tồn tại trong database table.
Cú pháp: unique:table,column,except,idColumn
Validation rule:
Chỉ định tên cột tùy chỉnh:
column
có thể dùng để xác định cột tương ứng cho việc kiểm tra. Nếu column
không được chỉ định, framework sẽ sử dụng tên trường để thay thế.
Tùy chỉnh kết nối database:
Ta chỉ cần sử dụng ký tự .
để chọn database connection.
Ràng buộc unique
rule bỏ qua một ID nhất định:
Đôi khi chúng ta cần bỏ qua một ID nhất định trong lần kiểm tra tồn tại duy nhất. Xem xét trường hợp "Cập nhật hồ sơ" bao gồm username, email. Bạn muốn xác thực rằng địa chỉ email là duy nhất. Tuy nhiên, nếu người dùng chỉ thay đổi username mà không thay đổi email, chắc chắn bạn không muốn rằng ném lột lỗi "Email đã tồn tại" cho user đúng không nào?
Để hướng dẫn Validator bỏ qua ID người dùng, chúng ta có thể sử dụng lớp Rule
để định nghĩa. Ta có thể làm như sau:
Lưu ý: Tham số truyền vào method
ignore
chỉ nên là do bạn định nghĩa, không nên lấy từ dữ liệu đầu vào của người dùng, bạn rất có thể sẽ bị tấn công SQL injection.
Bạn cũng có thể truyền một object model. framework sẽ tự động lấy key cần thiết.
Nếu table bạn sử dụng cột khóa chính khác với id
, bạn có thể chỉ định tên của cột tại method ignore
.
Mặc định. rule unique
sẽ kiểm tra tính duy nhất của cột khớp với tên của trường gửi đến. Tuy nhiên, bạn có thể thay đổi tên cột bằng cách truyền tham số thứ hai tại method Rule:unique
.
Thêm các điều kiện bổ sung:
Bạn có thể chỉ định câu truy vấn bổ sung bằng cách sử dụng method where
.
Lưu ý: Hiện tại chúng ta chưa tiếp xúc đến database nên validation rule này mình nghĩ nên test trong các bài học sau.
Thông báo mặc định:
Trường được xác thực phải có dạng URL.
Cú pháp: url
HTML:
Validation rule:
Thông báo mặc định:
Trường được xác thực phải có dạng RFC 4122 (phiên bản 1, 3, 4 hoặc 5) universally unique identifier (UUID). Cái này hiểu đơn giản là một ID thay thế cho auto-increment ID chính để tối ưu cho việc truy vấn trong ngữ cảnh nào đó, các bạn có thể Google thêm.
Cú pháp: uuid
HTML:
Validation rule:
Thông báo mặc định:
Trong một vài trường hợp, bạn muốn chạy trình xác thực khi trường đó thực sự tồn tại trong đầu vào. Để thực hiện nhanh, bạn có thể thêm rule sometimes
trước khi khai báo các validation rule khác.
Trong đoạn code trên, trường email
chỉ được xác thực khi nó tồn tại trong $data
.
Lưu ý: Nếu như bạn đang muốn xác thực một trường nhưng nó có thể trống, bạn có thể xem xét đặt rule
nullable
.
Đôi khi, bạn muốn thêm các quy tắc xác thực dựa trên điều kiện logic phức tạo hơn. Chẳng hạn bạn chỉ muốn required
một trường nhất định nếu trường khác có giá trị lớn hơn hoặc bằng 100. Hãy xem ví dụ sau:
HTML:
Mình sẽ tạo hai trường field
và anotherfield
.
Validation rule:
Đến đây, ta sẽ tạo trình validator với Validator
facade.
Quan sát quá trình validator trên, ban đầu mình đã khai báo các validation rule cho trường field
. Yêu cầu của ứng dụng là nếu như giá trị của trường field
này mà lớn hơn hoặc bằng 100 thì sẽ xác thực required
cho trường anotherfield
bằng cách sử dùng method sometimes
.
Tham số thứ nhất chính là tên trường cần xác thực
Tham số thứ hai chính là danh sách các validation rule cần vượt qua.
Tham số thứ ba sẽ là một Closure object, nó nhận nhận tham số $input
để có thể truy cập đến các input request, cuối cùng trả về một giá trị boolean, nếu true
thì trường đó sẽ thực hiện validate.
Xác thực các trường dựa trên mảng không phải là một điều quá khó khăn. Bạn có thể sử dụng ký tự .
để tham chiểu đến các phần tử trong mảng trong quá trình tạo trình xác thực. Chẳng hạn nếu request có chứa mảng hình ảnh photos[profile]
thì ta có thể thực hiện validate như sau:
Nếu request chứa mảng multi-level, bạn vẫn có thể tham chiếu đến các phần tử con trong mảng như sau:
Tương tự, bạn cũng có thể sử dụng ký tự *
để chỉ định các thông báo xác thực trong file ngôn ngữ, giúp dễ dàng tạo thông báo xác thực cho các trường dựa trên mảng.
Laravel cung cấp rất nhiều rule hữu ích; tuy nhiên, chúng ta vẫn có thể chỉ định các rule theo ý muốn. Để tạo một rule object mới, ta có thể sử dụng lệnh Artisan sau:
php artisan make:rule Uppercase
Một thư mục app/Rules
sẽ được tạo cùng với file Uppercase.php
bên trong. Bây giờ hãy mở file này lên và quan sát:
Trong một rule object có hai method chính: passes
và message
. Method passes
sẽ nhận tên trường và giá trị của nó và trả về các giá trị true
hoặc false
tùy thuộc vào giá trị của trường có hợp lệ hay không. Method message
sẽ trả về thông báo lỗi xác thực nếu không vượt qua.
Giờ hay chèn đoạn code này vào method passes
:
Tiếp đến là tùy chỉnh một chút câu thông báo:
Như thế là ta đã có thể kiểm tra được rồi đấy, để gọi validation rule ta chỉ cần khởi tạo object của nó trong validator.
Nếu bạn chỉ cần tùy chỉnh rule 1 lần duy nhất trong ứng dụng, bạn có thể sử dụng hình thức closure để làm việc này thay thế cho rule object. Closure này sẽ nhận tên trường, giá trị của trường và một biến callback $fail
để trả về lỗi nếu không vượt qua.
Một cách khác để đăng ký validation rule tùy chỉnh đó là sử dụng method extend
trong Validator
facade. Ta có thể định nghĩa nó tại method boot
của AppServiceProvider
.
Bạn cũng có thể truyền vào một controller action thay vì closure.
Để khai báo thông báo xác thực lỗi cho rule vừa khởi tạo, các bạn mở file resources/lang/xx/validation.php
và định nghĩa câu thông báo cùng cấp với các rule có sẵn khác.
Như vậy là ta đã có thể sử dụng được rồi đấy.
Ngoài ra, bạn cũng có thể thay đổi câu thông báo xác thực tại service provider bằng cách sử ụng method Validator::replacer
sau khi đã định nghĩa method Validator::extend
trước đó.
Theo mặc định, một trường được xác thực không tồn tại hoặc rỗng trong đầu vào, các quy tắc xác thực có sẵn, bao gồm cả các quy tắc tùy chỉnh sẽ không được chạy. Chẳng hạn rule unique
sẽ không chạy nếu như đầu vào mang giá trị rỗng.
Để một rule chạy ngay cả khi trường mang dữ liệu trống, quy tắt phải ngụ ý rằng trường được required
. Để tạo một "implicit" extension, sử dụng method Validator::extendImplicit
.
Lưu ý: Một "implicit" extension chỉ ngụ ý rằng trường được
required
. Cho dù nó thực sự làm mất hiệu lực một trường không tồn tại hoặc trống là tùy thuộc vào bạn.
Nếu bạn muốn một rule object chạy ngay cả khi giá trị của trường trống hoặc không tồn tại, bạn có thể implement
interface Illuminate\Contracts\Validation\ImplicitRule
. Interface này sẽ đóng vai trò là "giao diện đánh dấu" cho validator; do đó nó sẽ không chứa bất cứ method nào bạn cần để implement
.
Trường được xác thực phải là một địa chỉ email. Trong giới hạn, rule này sử dụng gói để validate email. Trong đó có các validator như:
File được xác thực phải khớp với một trong các định dạng mở rộng đã cho. Rule này sẽ xác thực MIME trước thông qua đọc nội dụng file và đoán rồi mới xác thực định dạng mở rộng. Có thể nói đây là một rule mở rộng của mimetypes
. Bạn có thể tham khảo một số các MIME tại .
Cảm ơn các bạn đã quan tâm theo dõi. Cùng đồng hành với mình qua những tập tiếp theo tại series "" nhé! Chúc may mắn và hẹn gặp lại.