2011-09-16 10 views
0

私は小さなエスショップで簡単なチェックアウトを行っています。私は最終的なレビューのオプションをユーザに与えたいと思います。したがって、流れはです。バスケット - >買い手の情報 - > - >注文確認です。複数ページのチェックアウト - データの転送

ここで問題は、フェーズ2と3の間でデータを転送する最良の方法は何でしょうか?

1つのオプションは、HTMLフィールドと隠しフォームフィールドを使用することです。欠点は、フェーズ3の後に別の入力チェックを行う必要があることです(ユーザーが入力を変更できるためです)。

もう1つの選択肢は、セッションを使用することです。順序はオブジェクト(Sf2 Entity)に格納されているので、配列に変換して後で元に戻す必要があります。また、セッション変数にあまりにも多くのデータを入れることは、パフォーマンスに悪影響を与える可能性があることを読んだことがあります。

3番目のオプションはdbに格納されますが、最終確認まで何も保存しないことをお勧めします。

もっと良い選択肢はありますか?

+0

はチェックアウトがカートやcart_itemsのためのテーブルを有するものが含まれるまでは何も保存したいと思いませんか?あなたはすでにそれらを持っていますか? – thegaffney

+0

@ thegaffney、私はそれらを持っていますが、注文が本当に行われるまでデータを保存する必要はありません。さもなければ、私は作られていない注文のための清掃の仕組みが必要です。 – Czechnology

+0

最後に、私はセッションを使用しました。すべての答えをありがとう、+1! – Czechnology

答えて

2

フォームデータが大量にある場合を除いて、セッション変数はここでは問題ありません。メモリを心配する場合は、最終確認後にいつでもそのデータを削除することができます。

2

キャッシュレベル(APCまたはMemcachedなど)にこれらのデータを保存し、有効期限を設定することができます。

あるいは、同じようYii's solutionは、隠された入力を使用し、そして値として設定します。ハッシュ(秘密+ base64方式(データ))+ base64で(データ)を、そしてあなたは、フェーズの最初のハッシュを検証する必要があります。3.

私の悪い英語を忘れました。 :)

+0

バリデーションを追加することでバリデーションを削除しますか? – Dani

1

セッションはそのジョブでうまくいきます。セッション処理を調整して、データがデータベースに格納されるようにすることができます。それは単なるデータベース読取り/書込み手順なので、キャッシュ処理はそれほど高速ではありません。

1

セッションで、flashdataで保存します。これは完璧に動作し、必要なときにセッションがクリアされます。

はsymfony 2にflashdataを使用するには:

$this->get('session')->setFlash('key', 'value'); 
+0

次のリクエストでフラッシュデータがクリアされていませんか?お客様が注文確認ページを更新した場合はどうなりますか? – Problematic

+0

これらのページにある場合は、フラッシュデータを読み取ることができます。 –

関連する問題