0

CakePHP フレームワークを試していますが、オブジェクトの状態について質問があります。

以前は、オブジェクトをシリアライズし、リロード時にアンシリアライズすることに慣れていました。このように、オブジェクトは常にその状態を維持しますが、それがベスト プラクティスであるかどうかはわかりません。

ショッピング カートに追加された製品とモデルの一般的な状態を追跡するためのベスト プラクティスは何ですか? オブジェクトの状態を何らかの方法でセッションに保存しますか? または、データをセッションに保持し、ページがリロードされたときにモデルを再構築しますか?

CakePHP には、オブジェクトと状態に関して知っておくべき組み込み機能がありますか?

4

1 に答える 1

1

あなたの質問に逆の順序で答えるのが適切だと思われました。

CakePHP には、オブジェクトと状態に関して知っておくべきビルトイン機能がありますか?

はい!CakePHP にはPHP オブジェクト用のラッパーが組み込まれ$_SESSIONているため、提供されている便利なメソッドを使用してオブジェクトをすばやく追加したり削除したりできます。

ショッピング カートに追加された製品とモデルの一般的な状態を追跡するためのベスト プラクティスは何ですか? オブジェクトの状態を何らかの方法でセッションに保存しますか? または、データをセッションに保持し、ページがリロードされた場合にモデルを再構築しますか?

すべてのフレームワーク オブジェクト (コントローラー、モデルなど) は一般にステートレスであるため、個人的には、アプリケーションで PHP クラスのインスタンスを永続化する必要があるとは思いませんでした。データベースのレコードは連想配列に格納されているため、シリアル化に問題はありません。

フレームワークについて考える最良の方法は、ページのリロード全体で状態を持つ唯一のものはデータベースです...そしてそれを使用することを選択した場合はセッションです。

あなたの場合、私はおそらく次のことを行います(コントローラーで):

public function addProductToCart($productId){
    // find the product in the database (model)
    $product => $this->Product->findById($productId);
    // get the existing state of the basket
    $basket = $this->Session->read('basket');
    // just in case the basket hasn't been initialised
    if($basket == null){
        $basket = array();
    }
    // append the basket to the database
    $basket[] = $product;
    // write the basket to the session
    $this->Session->write('basket', $basket);
}

ビューで Session オブジェクトを使用する方法も示されているので、ドキュメントを読んでください。

于 2013-05-04T12:07:35.450 に答える