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";
    }
}

Đăng ký nhận bài viết mới