我正在尝试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对象