Cze*_*ogy 4 php shopping-cart symfony
我正在学习Symfony2的方法,同时为家庭经营的葡萄酒进口商建立一个小型的电子商店.我慢慢了解Symfony2概念,但在继续构建购物车的过程中,我不太确定实现这一点的方法是正确的(至少根据Sf2标准).
我正在寻找的是一个简单的Basket存储BasketItems和它们在会话中的数量,然后在结账时使用这些数据.现在,在我以某种方式将它粘合在一起之前,我想听听关于如何完成和正确分离的建议.
到目前为止,我已经创建了两个实体,现在我不确定我是否应该将逻辑直接放在实体类或存储库中或者最好?
我希望这不是一个太广泛的问题.我很清楚一个真正强大的购物车实施不是一件小事.
在旁注中,是否已经为Symfony2提供了一些经过验证的工作购物篮?
创建实体和存储库时的一般规则是,Entity类应包含在单个Entity上运行所需的逻辑,而Repository类包含对实体组进行操作所需的逻辑.
一个简单的例子:
如果你想将商品的价格从美元转换成欧元,你就可以BasketItem::convertCurrencyTo($currencyType).这是在单个实体上运行的代码.
如果你想找到BasketItems价格在10美元到20美元之间的所有产品,你可以使用BasketItemRepository::findByPriceRange($min, $max).这是对一组实体进行操作的代码.
IMO,在处理具有一对多或多对多关系的实体时,事情会变得有些混乱.我会想象一个Basket有很多BasketItems,一个User有一个Basket.因此,我认为有理由认为,为了获取BasketItemsa User感兴趣,你可以这样做:
$user->getBasket()->getBasketItems().
请注意,此示例中没有使用Repository,因为它是一个非常基本的查询.如果你需要做一些更具体的事情,比如发现BasketItemsa User对发生的事情感兴趣,你可以使用类似的东西BasketItemRepository::findWhereOnSaleForBasket($BasketId).没有什么可以阻止你直接向类User或Basket类添加类似的方法,但我觉得因为你的查询的主要'目标'是a BasketItem,它属于该Entity的Repository类.
你提到实现购物车不是一项小任务,你是对的.但是你问的问题并不仅限于Symfony2(在这种情况下,它更多的是关于Doctrine 2),所以我认为如果你查看其他开源购物车并研究他们正在做什么可能会有所帮助.我认为Symfony2真正具有的唯一影响是迫使你决定如何在bundle中分割你的代码.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
4311 次 |
| 最近记录: |