我正在尝试使用cakePHP框架,我对对象状态有疑问。
以前,我已经习惯了序列化对象并在重新加载时反序列化它们。通过这种方式,对象始终保持状态,但我不确定这是否是最佳实践。
跟踪添加到购物车中的产品以及模型的一般状态的最佳做法是什么?我在会话中以某种方式保存对象状态吗?或者,我是否将数据保留在会话中并在重新加载页面时重建模型?
cakePHP是否提供了一些我应该了解的关于对象和状态的内置功能?
答案 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对象。