13

Symfony 2 を使用して小さな e ショップ アプリケーションを作成しています。ユーザーのショッピング カートをセッションに保存する方法が必要です。データベースを使用するのは良い考えではないと思います。

アプリケーションは、 ProductCategoryShoppingCartなどのエンティティを使用します。ここで、 Product と Category はデータベースに保持され、ユーザーは自分の ShoppingCart で製品を選択します。

エンティティをセッションに保存することになっているNativeSessionStorageクラスを見つけました。しかし、アプリケーションへの実装プロセスは文書化されていません。

これをコントローラーで使用するか、別のクラス ShoppingCart で使用しますか? NativeSessionStorage使い方の簡単な例を教えてください。

編集: 質問が正しく設定されていませんでした:

目標は、すべての製品 ID を Cookie に保存することではありません。目標は、バスケット (製品で満たされた) の参照のみをサーバー側のアプリケーション メモリに保存し、適切なバスケットをユーザーに割り当てることです。これはPHPでこれを行うことさえ可能ですか?

EDIT2

サービスを使用するより良い解決策はありますか?

4

3 に答える 3

23

この方法がデータを一時的に保存するためのより良い方法であるかどうかはわかりません。これを使用して、セッション オブジェクトをインスタンス化できます。

$session = $this->get("session");

コントローラーの「使用」を忘れないでください:

use Symfony\Component\HttpFoundation\Session;

次に、次のような変数を設定すると、セッションが自動的に開始されます。

$session->set("product name","computer");

これは、理解しやすいSessionクラスの使用に基づいています。一般的な定義:

get(string $name, mixed $default = null)

Returns an attribute.

set(string $name, mixed $value)

Sets an attribute.

has(string $name)

Checks if an attribute is defined.

また、データを保存する他の方法を見てください:複数のセッションストレージ

于 2012-06-13T14:26:11.193 に答える
14

エンティティをシリアライズ可能にしてエンティティ オブジェクトをシリアライズし、セッションに保存してから、 を使用して他のページで取得できますunserialize()。データベース Doctrine2 に存在するエンティティは、取得/シリアル化されていないエンティティを切り離されたものとしてマークするため、1 つの注意点があります。この場合は電話する必要があります$em->merge($entity);

于 2012-06-13T14:33:06.190 に答える