2008-09-13 31 views
5

Tôi hiện đang phát xung quanh với HTML_QuickForm để tạo biểu mẫu bằng PHP. Có vẻ như loại giới hạn ở chỗ khó chèn javascript của riêng tôi hoặc tùy chỉnh hiển thị và nhóm các phần tử nhất định.Thay thế cho PHP QuickForm?

Có bất kỳ lựa chọn thay thế nào cho QuickForm có thể cung cấp sự linh hoạt hơn không?

Trả lời

5

Nếu bạn thấy khó chèn Javascript vào các phần tử biểu mẫu, hãy xem xét sử dụng khung JavaScript như Prototype hoặc jQuery. Ở đó, bạn có thể tập trung vào nhiệm vụ tiêm xử lý sự kiện vào các điều khiển biểu mẫu.

Do đó, tôi có nghĩa là bạn sẽ không cần chèn trình xử lý sự kiện vào mã biểu mẫu HTML. Thay vào đó, bạn đăng ký các sự kiện đó từ một nơi khác. Ví dụ, trong Prototype bạn sẽ có thể viết một cái gì đó như thế này:

$('myFormControl').observe('click', myClickFunction) 

Cũng có một cái nhìn tại các câu trả lời cho another question.

/EDIT: tất nhiên, bạn cũng có thể chèn thuộc tính tùy chỉnh và do đó xử lý sự kiện vào các phần tử biểu mẫu bằng HTML_QuickForm. Tuy nhiên, cách trên là cấp trên.

+0

Cảm ơn đề xuất. Nghe có vẻ rất hữu ích và tôi chắc chắn sẽ kiểm tra nó. – Readonly

5

Tôi đã tìm thấy gói Zend_Form của Zend Framework linh hoạt. Thành phần này cũng có thể được sử dụng với Zend_Dojo để nhanh chóng triển khai trình trợ giúp biểu mẫu javascript phổ biến. Tuy nhiên, thành phần là không thuyết phục khi nói đến thư viện mà bạn sử dụng, nhưng hỗ trợ Dojo naitively. Thành phần này cũng cho phép tạo nhóm, biểu mẫu nhiều trang, trang trí tùy chỉnh, trình xác thực và các tính năng khác làm cho nó trở nên rất linh hoạt.

1

Tôi sẽ là người thứ hai Zend_Form; nó có một thực hiện phong cách ini tuyệt vời cho phép bạn xác định một hình thức cực kỳ nhanh chóng:

[main] 
vessel.form.method = "post" 

vessel.form.elements.name.type = "text" 
vessel.form.elements.name.name = "name" 
vessel.form.elements.name.options.label = "Name: " 
vessel.form.elements.name.options.required = true 

vessel.form.elements.identifier_type.type = "select" 
vessel.form.elements.identifier_type.name = "identifier_type" 
vessel.form.elements.identifier_type.options.label = "Identifier type: " 
vessel.form.elements.identifier_type.options.required = true 
vessel.form.elements.identifier_type.options.multioptions.IMO Number = "IMO Number"; 
vessel.form.elements.identifier_type.options.multioptions.Registry organisation and Number = "Registry organisation and Number"; 
vessel.form.elements.identifier_type.options.multioptions.SSR Number = "SSR Number"; 

vessel.form.elements.identifier.type = "text" 
vessel.form.elements.identifier.name = "identifier" 
vessel.form.elements.identifier.options.label = "Identifier: " 
vessel.form.elements.identifier.options.required = true 
vessel.form.elements.identifier.options.filters.lower.filter = "StringToUpper" 

vessel.form.elements.email.type = "text" 
vessel.form.elements.email.name = "email" 
vessel.form.elements.email.options.label = "Email: " 
vessel.form.elements.email.options.required = true 

vessel.form.elements.owner_id.type = "hidden" 
vessel.form.elements.owner_id.name = "owner_id" 
vessel.form.elements.owner_id.options.required = true 

; submit button 
vessel.form.elements.submit.type = "submit" 
vessel.form.elements.submit.name = "Update" 
vessel.form.elements.submit.option.value = "Update" 
4

tôi đã viết một bài báo về vấn đề này cho OnLamp: Autofilled PHP Forms

thịt bò Mỹ với HTML_QuickForm và Zend_Form và tất cả các form- khác các khung công tác xử lý mà tôi có thể thấy là chúng dường như giả định rằng bạn sẽ viết mã để tạo biểu mẫu. Nhưng điều đó không phù hợp với quá trình phát triển của tôi, nơi tôi bắt đầu với LOOK của trang (được chỉ định qua các mẫu HTML) và thêm chức năng cho nó.

Theo quan điểm của tôi về thế giới, xử lý hình thức nắm tới:

  1. Tìm nạp các dữ liệu mà nên đi theo hình thức để bắt đầu (thường là từ một cơ sở dữ liệu).
  2. Tìm nạp mã HTML cho biểu mẫu (thường là mẫu).
  3. Nghiền 1 và 2 với nhau và xuất kết quả.
  4. Nhận dữ liệu biểu mẫu đã gửi và xác thực nó.
  5. Hiển thị lại biểu mẫu với thông báo lỗi và dữ liệu không hợp lệ, HOẶC
  6. Hiển thị trang chúc mừng-bạn-dữ liệu-ok của bạn.

fillInFormValues ​​() làm cho 2, 3 và 5 thực sự dễ dàng.

+0

+1 từ tôi. Tôi đồng ý với bạn hết lòng và thực sự thích giao diện của lớp fillInFormValues ​​() của bạn. – da5id

1

Với Zend_Form, bạn hoàn toàn có thể bắt đầu với biểu mẫu của mình một cách trực quan, sau đó làm việc ngược lại.

này được thực hiện bằng cách loại bỏ tất cả trang trí và thay thế chúng bằng một decorator ViewScript

$this->form->setDecorators(array(array('ViewScript', array('viewScript' => 'forms/aform.phtml')))); 

Và ở chỗ viewscript bạn sẽ làm một cái gì đó như thế này:

<?=$this->element->title->renderViewHelper()?> 

Đi với phương pháp này, bạn có thể về cơ bản làm bất cứ điều gì bạn muốn với biểu mẫu.

Một điều tuyệt vời khác về Zend_Form là bạn có thể tạo các phần tử tùy chỉnh có thể đóng gói các nội dung khác trong chúng. Ví dụ, bạn có thể có một phần tử xuất ra một vùng văn bản và sau đó một số Javascript để biến nó thành một vùng WYSIWYG.

0

Tôi thực sự không thể nói bất cứ điều gì về nó nhưng, vào một ngày khác, tôi đã chạy qua thư viện biểu mẫu clonefish. Có vẻ đủ hứa hẹn để kết thúc trong danh sách dấu trang của tôi là "xem sau này".