2016-05-05 81 views
6

在我目前ZF2項目,我有一個複雜的Form嵌套Fieldset S的多層次,反映對象的結構被保存在後臺。目前數據直接發送到Controller並保存到數據庫(如果有效)。如何在Zend Framework 2中實現表單預覽頁面?

現在的一箇中間步驟應當實現:用戶應該有機會檢查輸入數據之前將它保存到數據庫中。如果他決定,這是正確的,表格數據應提交併保存到數據庫;如果用戶決定,表單必須被編輯,他應該能夠回到表單並更正它。 (當然,所有這在一個循環,直到用戶滿意表單並提交。)

這意味着,需要預覽頁面。此頁面/ action應該獲取數據並以某種方式顯示(作爲表格或其他)。數據需要暫時存儲在某個地方,並準備好「水合」到Form對象並保存。如果用戶想要更新表單,則表單應該被恢復。

我怎樣才能實現這一要求?

UPDATE

我正在尋找一個服務器端解決方案。預覽應該是一個新頁面,而不是在同一頁面上的JavScript /客戶端生成的HTML(用於跟蹤和其他目的)。

+0

不能序列化對象並將它們存儲在會話中。然後在用戶接受其數據後,將這些對象保存到數據庫中。 – Garry

+0

你是什麼意思? 'Form'?以及在哪裏存儲 - 在會話中? – automatix

回答

0

我要說的是,最好的辦法是實現一個客戶端雙面(Java的),這是你的執行形式POST請求之前執行的腳本。您可以捕獲表單提交事件並呈現客戶端視圖,在其中顯示所有表單字段(名稱和值)的當前狀態。如果用戶單擊accept,則繼續執行POST操作。如果用戶點擊取消,則返回到允許進行其他更改的表單視圖,並且整個過程都會重複。

它不應該是很難找到關於如何做到這一點的例子...

一個例子是this blog post,但也有更多的發現與the help of Google

+0

謝謝你的回答!好吧,理論上它可以工作,但通過這種方法,我需要複製所有服務器端實現的驗證邏輯,用JavaScript重新實現它。 – automatix

+0

您寫道:*「用戶應該有機會在輸入數據發送到服務器之前檢查輸入數據;如果他決定,這是正確的,表單應提交併保存到數據庫」*,這是可能的,而不需要添加任何驗證:1)用戶檢查他的輸入。 2)當用戶認爲一切正常時,你仍然可以讓服務器完成工作並驗證。但是如果你希望服務器在用戶之前進行驗證,你確實可以在客戶端上編寫類似的驗證代碼。讓服務器在每一次嘗試中都做好所有的工作會更有效率。Html5驗證可能會有所幫助。 – Wilt

+0

@automatix [有一些ZF2模塊](https://www.google.se/search?q=zf2%20client%20side%20validation),可以幫助您將客戶端驗證集成到您的項目中。我沒有任何第一手經驗,但可能值得一試。 – Wilt

0

因爲我不知道你的應用/數據庫是如何構成的,我只能猜測,你可以創建一個能夠存儲臨時數據或其他表後,用戶提交表單,它是驗證的而不是保存在數據庫使所有字段都是隻讀的,並將原始提交按鈕替換爲保存數據的那個按鈕,以及將用戶帶回其可以更改數據的表單。