CakePHP保存对象状态


CakePHP save objects state

我正在尝试cakePHP框架,我有一个关于对象状态的问题。

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

跟踪添加到购物车中的产品和模型的一般状态的最佳实践是什么?我是否在会话中保存对象状态?还是将数据保存在会话中,并在重新加载页面时重新构建模型?

cakePHP是否提供了一些我应该知道的内置功能,当它涉及到对象和状态?

我倒着回答你的问题似乎很合适。

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对象