2012-06-13 8 views
11

私はSymfony 2で小さなe-shopアプリケーションを作成しています。セッションにユーザーのショッピングカートを保存する方法が必要です。私はデータベースを使うのは良い考えではないと思います。 製品、プロダクトとカテゴリがデータベースとユーザーに永続化されカテゴリーShoppingCartののようなエンティティを使用しますセッションをオブジェクトに保存するsymfony 2

アプリケーションは、彼らのShoppingCartのに製品を選択することになります。

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

私はコントローラーまたはSeparated Class ShoppingCartでこれを使用しますか? NativeSessionStorageの使用例を教えてください。

EDIT: 質問が正しく設定されていなかった。

目標は、クッキーにすべての製品IDを保存することはありません。目的は、サーバーサイドのアプリケーションメモリにバスケット(商品でいっぱい)の参照のみを保存し、ユーザーに適切なバスケットを割り当てることです。 PHPでこれを行うことも可能ですか?

EDIT2

サービスを使用するためのよりよい解決策ですか?

+0

アイデアはストレージが非常に限られており、それが成功したかどうかを知る方法がないためです。私はむしろ一時的なテーブルやデータベースに保存したいと思うかもしれません。多分redisやmongodbのようなものを使ってセッションのショッピングカートにキーを保存するだけです。 – Sgoettschkes

答えて

20

この方法でデータを一時的に保存する方が良いかどうかわかりません。設定したいとき、セッションが自動的に起動すると

use Symfony\Component\HttpFoundation\Session; 

$session = $this->get("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. 

、あなたのデータを格納するための他の方法を見てみましょう:あなたはあなたのエンティティSerializableを作成し、エンティティオブジェクトをシリアル化し、セッションに保存し、他のページで取得することができますMultiple SessionStorage

+0

これは、セッションサービスの使用方法についてのみ説明しています。エンティティインスタンスをセッションに格納する必要があることが指定されているので、Mun Mun DasとIvan Kvasnicaの回答は、格納されたエンティティを直列化可能にするためにも使用する必要があります。 – Adambean

14

unserialize()を使用してください。 1つの注意点があります.db Doctrine2に存在するエンティティは、取得されたエンティティまたはシリアル化されていないエンティティをdetachedとしてマークします。この場合は、$em->merge($entity);に電話する必要があります。

5

オブジェクト全体をSymfonyのセッションに保存できます。ちょうど(コントローラに)使用:

$this->get('session')->set('session_name', $object); 

注意:オブジェクトをシリアライズする必要があります。それ以外の場合は、start_session()関数でセッションをロードするとPHPがクラッシュします。

はちょうどこのように、シリアル化()とアンシリアライズ()メソッドを追加することで、\ Serializableインタフェースを実装しています

​​

出典:それは一般的に悪いです​​(このトピックに関する私のブログ投稿)

関連する問題