2012-08-30 11 views
5

Zend Dạng 2 cấu trúc tất cả các phần tử trong các trường. (Zend \ Mẫu \ Form mở rộng fieldset - Mẫu :: thêm cuộc gọi parent :: thêm)Lặp qua các phần tử biểu mẫu theo thứ tự chúng được thêm

Nếu tôi chỉ cần thêm yếu tố để Form tôi có thể nhận được chúng qua $form->getElements() nếu tôi sử dụng một fieldset tôi có thể nhận được chúng qua

foreach($form->getFieldsets() as $fieldset){ 
    $elements = $fieldset->getElements(); 
} 

Nhưng hãy tưởng tượng một biểu mẫu mà tôi thêm một vài trường ẩn, sau đó là một fieldset và cuối cùng là nút gửi.

Tôi làm cách nào để có được các phần tử/các trường theo đúng thứ tự?

Lý do đằng sau điều này, tôi đang làm việc trên trình trợ giúp xem cho phép tôi in biểu mẫu qua một cuộc gọi đơn giản tới trình trợ giúp xem.

Tôi không muốn gọi mọi phần tử biểu mẫu qua một cuộc gọi đến formRow() (Tôi biết về khái niệm đằng sau Form2 - tách logic từ trình bày)

Bất kỳ giúp đỡ được nhiều đánh giá cao. TIA

Trả lời

9

bạn có thể làm như sau để có được các yếu tố và fieldsets theo thứ tự chúng được thêm vào biểu mẫu:

/* $form is an instance of \Zend\Form\Form */ 
foreach ($form as $element) { 

    // check if it's a form element or a fieldset etc. 
    // and recursively iterate over elements of fieldsets etc. 
} 
+0

ah cảm ơn, đơn giản như vậy, tôi cuối cùng đã tìm thấy nơi các Interface IteratorAggregate được thiết lập (trong FieldsetInterface), nhưng tôi không tìm thấy các phương pháp prev | prev | current | vì vậy tôi không bao giờ cố gắng trực tiếp lặp qua đối tượng. – Rufinus