CakePHP保存对象状态

时间:2013-05-04 09:17:02

标签: php session cakephp

我正在尝试使用cakePHP框架,我对对象状态有疑问。

以前,我已经习惯了序列化对象并在重新加载时反序列化它们。通过这种方式,对象始终保持状态,但我不确定这是否是最佳实践。

跟踪添加到购物车中的产品以及模型的一般状态的最佳做法是什么?我在会话中以某种方式保存对象状态吗?或者,我是否将数据保留在会话中并在重新加载页面时重建模型?

cakePHP是否提供了一些我应该了解的关于对象和状态的内置功能?

1 个答案:

答案 0 :(得分:1)

以相反的顺序回答你的问题似乎很合适。

  

cakePHP是否提供了一些我应该了解的内置功能   谈到对象和状态?

是的!,CakePHP对PHP $_SESSION对象有一个built in wrapper,因此您可以使用提供的便捷方法快速添加和删除对象。

  

跟踪添加到产品中的产品的最佳做法是什么?   shoopingcart和模型的一般状态?我保存对象吗?   以某种方式在会议中?或者我将数据保存在会话中并重建   重新加载页面的模型?

我个人从未发现需要在我的应用程序中保留PHP类的实例,因为所有框架对象(例如控制器,模型等)通常都是无状态的。由于数据库中的记录存储在关联数组中,因此序列化它们没有问题。

考虑框架的最佳方式是使页面重新加载状态的唯一方法是数据库......如果选择使用它,则使用Session。

在您的情况下,我可能会执行以下操作(在您的控制器中):

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);
}

请阅读documentation,因为它会向您展示如何在视图中使用Session对象。