2012-05-28 50 views
1

我正在開發一個非常糟糕的代碼庫,它圍繞Zend Framework(PHP)形成的鬆散地,所以ORM不能使用,任何其他框架都不能使用。我試圖使用Zend_Form,但我發現文檔太稀疏了(我用Zend_Form開發了小表單,但沒有這個大小)。什麼是驗證和存儲複雜的多頁表單的最佳方法?

我需要創建一個長表單(6頁長)。用戶可以根據自己的意願在他們之間進行切換,直到他們嘗試提交表單(我認爲這不是一個好主意,但這是規範說明的)。

在過程結束時,表單將被驗證,然後數據將被拆分爲數據庫中的許多不同表格。噢,只是爲了讓事情變得有趣:這種形式有三種版本,所有字段都有輕微的改動,沒什麼大不了的。它們都將數據存儲在相同的表中。

那麼,這樣做的最好方法是什麼?我應該如何構建它,以及如果你必須構建這樣的表單,你會做什麼?我正在用PHP編寫它,但也希望聽到其他語言程序員的回覆。此外,如果有任何圖書館或工具用於構建此類表單,我也希望聽到這些表單。

+0

你問的只是表單提交的最後一部分? –

+0

我在詢問從頭到尾的整個過程。我並不是要求提供特定的代碼示例,而只是概述您要開始的位置,要創建的類別等。我現在有一份表格的工作副本,因爲我必須趕緊趕到截止日期,但現在我有更多時間希望重新編碼。 – Tim

+0

你是否需要完整的表單創建和更新過程? – Katti

回答

2

從來沒有這樣做過使用ZF,從來沒有做過這樣的形式與驗證只有當提交最後一步,從來沒有做過一個多步表單,其中用戶可以從一步跳到他們想要的步驟(我的意思是從第一步跳到第四步,例如) 。

我所做的是一個5步表單(在第4步中可能有更多3個子步驟)。用戶可以一次執行一個步驟,或一次返回一個步驟。每一步都被提交併驗證 - 直到有效的用戶不能跳到下一步,但他仍然可以返回 - 插入的值存儲在會話中。我創建了一個模型(包含其他子類的結構化類),因此在每個步驟提交併且有效之後,將數據設置到存儲在會話中的此模型中。

如果你需要一個非常大的表單,用戶可以通過幾步。他想,我會考慮兩種方式:

  1. 創建只是一個形式直觀地劃分爲標籤的步驟 - 每個標籤將只包含只有最後一個標籤會包含提交按鈕。其他選項卡將包含一個「下一步」按鈕,只會打開下一個選項卡。字段數量可能存在問題 - 您可以通過POST僅發送有限數量的字段,並通過GET發送更多數量有限的字段(對不起,不知道數字)。然後在調用提交後進行驗證,然後您可以填充數據庫表...
  2. 爲每個步驟創建一個表單。創建一個將存儲數據的模型。每一步都將提交數據並將其存儲到該模型中(除了最後一步 - 這也將調用插入數據的驗證) - 模型將保存在會話中。驗證失敗時您將把用戶重定向到第一個無效步驟,在數據無效的步驟中顯示一條消息(也可以使該步驟無效)。如果驗證是確定的,則取模型並填寫數據庫表...

不能告訴你這兩種方式會有多困難,因爲我沒有使用ZF做這樣的事情......並且希望永遠不會有至。

我還要考慮向客戶端,只在最後一步解釋,驗證是有點愚蠢和用戶 - 友好...

+0

好主意。這裏的項目經理已經和客戶談過了,並告訴他們這是一個壞主意,但這就是他們想要的東西。我們都同意這是一個可怕的想法。 – Tim

+0

祝你好運然後:-) – shadyyx

0

我會在幾個章節起來把它分解:

形式處理

您這裏有兩個主要的選擇(沒有強烈的感情的一種方式或其他):

  1. 在一個頁面中創建整個表單,並使用JavaScript(或諸如jQuery之類的庫)在表單部分之間移動;也可以選擇在這裏進行一些客戶端驗證。

  2. 每頁創建一個表單,並讓PHP通過使用會話或使用隱藏輸入字段(我個人更喜歡會話)將所有內容保留在表單中來處理結轉。

處理這些細微的變化可以通過簡單地在第一頁中傳遞版本來完成,並通過採用策略模式來相應地改變表單。

最後提交

進行驗證,你可以使用PHP的filter擴展(默認出廠BTW);它非常體面和可擴展。

如果驗證失敗,最好收集所有錯誤並將它們顯示給用戶(可能用超鏈接跳轉到它們各自的部分),而不是僅顯示第一個錯誤;在每個部分,您可能會再次提到錯誤以便於使用(用戶不願意來回跳轉)。

將整個表單存儲在數據庫中的變化方式與表單本身沒有多大差別。這裏再次使用策略模式。

希望這涵蓋了大部分,讓我知道如果你認爲我可以改善。

0

你被暫時無法使用ORM或框架限制所以你可以看看序列化並將對象存儲爲會話對象。

創建一個「表單」類,其中包含特定於表單的一些屬性,並在每次表單提交後設置這些值。

+0

是的,這是我認爲這樣做的一種方式。與此有關的主要問題是,我最終得到了一個絕對巨大的類,其中包含各種針對特定元素的自定義驗證規則。 – Tim

相關問題