Validator là gì
Validator là chức năng kiểm tra sự phù hợp của dữ liệu. Ví dụ ứng dụng web của bạn yêu cầu username cần có độ dài tối thiểu 6 ký tự, và chỉ sử dụng bảng chữ cái. Khi người dùng cập nhật dữ liệu này thì Validator sẽ làm việc để kiểm tra xem dữ liệu đó có phù hợp hay không.
Nếu thư viện của bạn chưa tích hợp Zend\Validator hãy tích hợp nó bằng lệnh composer
composer require zendframework/zend-validator
Sử dụng Validator cơ bản trong Zend Framework
Các Validator
cung cấp được kế thừa từ giao diện Zend\Validator\ValidatorInterface
nên chúng đều có hàm isValid() và getMessages()
Hàm isValid()
được gọi thì Validator sẽ tiến hành kiểm tra dữ liệu, nếu phù hợp trả về TRUE và False nếu sai. Lúc này gọi hàm getMessage
sẽ trả về mảng chứa các thông báo giải thích vì sao mà dữ liệu không phù hợp.
Ví dụ sau kiểm tra xem địa chỉ email nhập vào có phù hợp hay không bằng cách sử dụng validator có tên EmailAddress
:
$validator = new Zend\Validator\EmailAddress(); if ($validator->isValid($email)) { // Địa chỉ email là phù hợp } else { // Email sai và hiện thị thông báo foreach ($validator->getMessages() as $messageId => $message) { echo "Validation failure '$messageId': $message\n"; } }
Zend Framework cung cấp sẵn nhiều Validator xây dựng sẵn, danh sách xem tại: Các Validator chuẩn của ZF, nếu muốn viết một Validator riêng hãy xem Viết Validator trong ZF
Tùy chọn các thông báo lỗi cho Validator
Mỗi Validator của ZF có một tập hợp các thông báo, nhằm cho biết từng loại lỗi không phù hợp dữ liệu cụ thể.
Mỗi thông báo lỗi được xây dựng từ các biến thông báo và template thông báo. Để xem các biến thông báo dùng hàm: getMessageVariables()
. Để xem template thông báo dùng hàm getMessageTemplates()
.
Để thiết lập thông (thay đổi thông báo) bạn dùng hàm SetMessage
Ví dụ:
$validator = new Zend\Validator\StringLength(8); $validator->setMessage( 'The string \'%value%\' is too short; it must be at least %min% ' . 'characters', Zend\Validator\StringLength::TOO_SHORT); if (!$validator->isValid('word')) { $messages = $validator->getMessages(); echo current($messages); // "The string 'word' is too short; it must be at least 8 characters" }
Hoặc
$validator = new Zend\Validator\StringLength(array('min' => 8, 'max' => 12)); $validator->setMessages( array( Zend\Validator\StringLength::TOO_SHORT => 'The string \'%value%\' is too short', Zend\Validator\StringLength::TOO_LONG => 'The string \'%value%\' is too long' ));
Valid theo chuỗi
ValidatorChain
là lớp giúp bạn gắn nhiều validator thành một với phương thức attach, sau đó kiểm tra dữ liệu đi qua tất cả các validator đó.
$validatorChain = new Zend\Validator\ValidatorChain(); $validatorChain->attach(new Zend\Validator\StringLength( array('min' => 6, 'max' => 12))) ->attach(new Zend\I18n\Validator\Alnum()); if ($validatorChain->isValid($username)) { //Dữ liệu không phù hợp } else { //Thông báo lỗi về dữ liệu không phù hợp foreach ($validatorChain->getMessages() as $message) { echo "$message\n"; } }