2012-11-18 6 views
8

đối tượng mô hình của tôi thực hiện InputFilterAwareInterface và có getInputFilter() phương pháp, đó quay trở lại Zend \ InputFilter \ InputFilter dụLàm thế nào để sử dụng mà không cần InputFilter lớp mẫu trong khuôn khổ Zend 2

Tôi không cần hình thức trong trường hợp của tôi, tôi chỉ cần xác thực các phần tử từ mảng. Làm thế nào tôi có thể sử dụng Zend \ InputFilter \ InputFilter để xác nhận hợp lệ dữ liệu từ mảng mà không tạo lớp biểu mẫu?

Trả lời

17

Hy vọng mã là tự giải thích (setData để thiết lập mảng của bạn, setValidationGroup để rà soát tất cả các yếu tố, và isValid để có được kết quả của việc xác nhận):

use \Zend\InputFilter\InputFilterInterface; 

/* ... */ 

/** @var $data array */ 

/** @var $filter InputFilterInterface */ 
$filter = $this->getInputFilter(); 

$isValid = $filter->setData($data) 
        ->setValidationGroup(InputFilterInterface::VALIDATE_ALL) 
        ->isValid(); 

if (!$isValid) 
{ 
    $errorMessages = $filter->getMessages(); 
    /* ... */ 
} 
+0

bạn có thể đề xuất một cách tiếp cận để xác nhận chỉ có một hàng từ bộ? – yurisnk

+3

@yurisnk Bạn có thể thiết lập danh sách các trường để xác thực trong cuộc gọi đến 'setValidationGroup()', chỉ cần sử dụng '-> setValidationGroup ('field_name')' cho trường đơn hoặc '-> setValidationGroup (mảng ('field_name1', 'field_name2')) 'cho tập các trường trong ví dụ trên. –