Tôi có một phần tử. Tôi muốn thêm trình xác thực tùy chỉnh và bộ lọc tùy chỉnh cho nó. Trình xác thực đảm bảo đầu vào là một trong nhiều giá trị được phép, sau đó bộ lọc thêm một số giá trị tùy chỉnh vào đầu vào. Điều này có nghĩa là tôi phải xác thực đầu vào gốc trước tiên trước khi chạy bộ lọc. Tôi làm theo thứ tự nàyCách làm cho Bộ lọc này chạy sau khi Trình xác thực này
$element = new Zend_Form_Element_Text('element');
$element->addValidator('PermittedValue', false);
$element->addFilter('TotalHyphen', false);
$this->addElement($element);
nhưng thứ tự này không được tôn trọng. Bộ lọc chạy đầu tiên và thay đổi dữ liệu, sau đó trình xác thực chạy trên dữ liệu được lọc có nghĩa là bộ lọc luôn thất bại ngay cả đối với đầu vào hợp lệ. Có vẻ như từ documentation rằng đây là cố ý
Lưu ý: Validation hoạt động trên được lọc Values Zend_Form_Element :: isValid() lọc các giá trị thông qua việc cung cấp chuỗi lọc trước khi xác nhận. Xem phần Bộ lọc để biết thêm thông tin .
Làm cách nào để xác định thứ tự bộ kiểm tra và bộ lọc chạy?
+1. Trông rất đẹp. Tôi cũng không biết rằng phương thức setPostValidateFilters() sẽ được gọi tự động (yes?) Cho khóa 'postValidateFilters'. – Marcin
@Marcin: Tôi nghĩ đó là cách các tùy chọn hoạt động. Nếu có một phương thức "khớp" với tên tùy chọn, thì phương thức đó sẽ được gọi trong 'setOptions()'. –
+1 triển khai rất đẹp – tawfekov