我正在尝试 cakePHP 框架,我有一个关于对象状态的问题。
以前,我习惯于序列化对象并在重新加载时取消序列化它们。这样,对象始终保持其状态,但我不确定这是否是最佳做法。
跟踪添加到购物车的产品和模型的一般状态的最佳做法是什么?我是否在会话中以某种方式保存对象状态?或者我是否将数据保留在会话中并在重新加载页面时重建模型?
cakePHP 是否提供了一些我应该知道的关于对象和状态的内置功能?
以相反的顺序回答您的问题似乎很合适。
当涉及到对象和状态时,cakePHP 是否提供了一些我应该知道的内置功能?
是的!CakePHP 有一个内置的 PHP$_SESSION
对象包装器,因此您可以使用提供的便捷方法快速添加和删除对象。
跟踪添加到购物车的产品和模型的一般状态的最佳做法是什么?我是否在会话中以某种方式保存对象状态?或者如果重新加载页面,我是否将数据保留在会话中并重建模型?
我个人从来没有发现需要在我的应用程序中保留 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);
}
请务必阅读文档,因为它还将向您展示如何在您的视图中使用 Session 对象。