2016-05-05 7 views
6

私の現在のZF2プロジェクトでは、複数のレベルのネストされたFieldsetの複雑なFormがあります。これは、バックグラウンドで保存されるオブジェクトの構造を反映しています。現在、データはControllerに直接送信され、有効な場合はデータベースに保存されます。Zend Framework 2でフォームプレビューページを実装する方法は?

中間ステップを実装する必要があります。入力データをデータベースに保存する前に、入力データを確認する機会があります。彼がそれを正しければ、フォームデータを提出してデータベースに保存する必要があります。ユーザーがフォームを編集する必要があると判断した場合、フォームに戻って修正する必要があります。 (もちろん、ユーザーがフォームに満足して投稿するまでは、ループ内のすべてのものです)。

つまり、プレビューページが必要です。このページ/ actionは、データを取得して何らかの形で表示する必要があります(ただし、テーブルとして)。データは一時的にどこかに保存し、Formオブジェクトに「水和」する準備ができて保存する必要があります。ユーザーがフォームを更新する場合は、フォームを復元する必要があります。

どのようにこの要件を実装できますか?

UPDATE

私は、サーバー側のソリューションを探しています。プレビューは、新しいページでなければならず、JavScript /クライアント側で生成された同じページのHTMLではありません(トラッキングなどの目的で)。

+0

オブジェクトをシリアル化してセッションに格納することはできません。その後、ユーザーがデータを受け入れた後にオブジェクトをデータベースに保存するために、オブジェクトを非セールします。 – Garry

+0

どのようなオブジェクトを意味していますか?フォーム?セッションにはどこに保管しますか? – automatix

答えて

0

フォームPOSTリクエストを実行する前に実行されるクライアント側の(java-)スクリプトを実装するのが最善の解決策であると言います。フォーム送信イベントをキャッチして、すべてのフォームフィールド(名前と値)の現在の状態を表示するクライアントサイドビューをレンダリングできます。ユーザーが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

私はあなたのアプリケーション/ dbがどのように構造化されているかわからないので、一時的なデータを保持する別のテーブルを作成することができますか、またはユーザーがフォームを送信した後、db makeすべてのフィールドが読み取り専用で、元の送信ボタンをデータを保存するボタンに置​​き換え、ユーザーをデータを変更できるフォームに戻すボタンに置​​き換えます。

関連する問題