2011-09-30 74 views
2

我使用Zepel框架和Propel。使用Propel對象作爲存儲在數據庫中的事物的模型很容易,但我該如何創建自定義模型(如使用推進對象的購物車)?Zend Framework中的自定義類

我正在考慮創建一個名爲CartItem和Cart的類。如果CartItem包含propel Product類,並且Cart包含CartItem的數組,則在會話中存儲該代碼似乎非常昂貴。一般情況下我只是用一個數組,但我試圖讓與OOP更好

+0

將購物車數據存儲在數據庫中沒有任何問題。請參閱http://stackoverflow.com/questions/297576/storing-shopping-cart-in-session – Phil

回答

1

你可以使用PHP的接口Serializable接口:http://php.net/manual/de/class.serializable.php

你可以用它來你的車的一個實例轉換成更高效值(你定義了什麼存儲),在你的情況下,這是一個二維數組。

嘗試這樣:

<?php 

class Cart implements Serializable { 

    // your normal code for the Cart class 

    public function serialize() { 
     $cartData = array(); 
     foreach($this->cartItems as $item) { 
      $cartData[] = array(
       'count' => $item->getCount(), 
       'productId' => $item->getId() 
      ); 
     } 
     return serialize($cartData); 
    } 

    public function unserialize($cartData) { 
     $this->cartItem = array(); 
     foreach($cartData as $item) { 
      // replace this with the appropriate propel code 
      $product = loadProductWithPropelById($item['id']); 
      $this->cartItems[] = new CartItem($item['count'], $product); 
     } 
    } 

} 

?> 

然後使用序列化存儲車在會話和檢索它:

<?php 

// Store cart to session 
$_SESSION['cart'] = serialize($cart); 

// get cart from session 
$cart = unserialize($_SESSION['cart']); 

?> 

與您的項目好運!

相關問題