【问题标题】:Shopping cart with Symfony2Symfony2 的购物车
【发布时间】:2011-11-17 04:32:07
【问题描述】:

我正在学习如何使用 Symfony2,同时为一家家庭经营的葡萄酒进口商建立一个小型电子商店。慢慢地,我开始了解 Symfony2 的概念,但在继续构建购物车时,我不太确定正确(至少根据 Sf2 标准)的实现方式是什么这个。

我正在寻找的是一个简单的Basket 存储BasketItems 及其在会话中的数量,然后在结帐时使用这些数据。现在,在我以某种方式将它们粘合在一起之前,我想听听有关如何正确完成和分离的建议。

到目前为止,我已经将这两个创建为实体,现在我不确定是否应该将逻辑直接放在实体类或存储库中,或者最好放在哪里?

我希望这不是一个太宽泛的问题。我很清楚,真正强大的购物车实施并非易事。


顺便说一句,Symfony2 周围是否已经有一些经过验证且有效的购物篮?

【问题讨论】:

    标签: php symfony shopping-cart


    【解决方案1】:

    创建实体和存储库时的一般规则是,实体类应包含对单个实体进行操作所需的逻辑,而存储库类应包含对实体组进行操作所需的逻辑。

    一个简单的例子:

    • 如果您想将商品的价格从美元转换为欧元,您可以使用BasketItem::convertCurrencyTo($currencyType)。这是在单个实体上运行的代码。

    • 如果您想查找价格在 10 美元到 20 美元之间的所有BasketItems,您可以使用BasketItemRepository::findByPriceRange($min, $max)。这是对一组实体进行操作的代码。

    IMO,在处理具有一对多或多对多关系的实体时,事情可能会有些混乱。我可以想象一个Basket 有很多BasketItems,而一个User 有一个Basket。因此,我认为有理由假设为了获取User 感兴趣的BasketItems,您可以执行以下操作:
    $user->getBasket()->getBasketItems()

    请注意,此示例中没有使用存储库,因为它是一个非常基本的查询。如果你需要做一些更具体的事情,比如找到BasketItemsUser 对碰巧正在出售的产品感兴趣,你可以使用BasketItemRepository::findWhereOnSaleForBasket($BasketId) 之类的东西。没有什么能阻止您将类似的方法直接添加到 UserBasket 类,但我觉得因为您的查询的主要“目标”是 BasketItem,它属于该实体的 Repository 类。

    您提到实现购物车并非易事,您是对的。但是您要问的问题并不仅限于 Symfony2(在这种情况下更多的是关于 Doctrine 2),所以我认为如果您查看其他开源购物车并研究他们在做什么可能会有所帮助。我认为 Symfony2 真正产生的唯一影响是迫使您决定如何在包中拆分代码。

    希望这会有所帮助!

    【讨论】:

    【解决方案2】:

    有一个名为Vespolina 的电子商务捆绑包也提供了cart

    【讨论】:

    • 如果上面的链接损坏,请查看vespolina.org。结帐 Leaphly(一个购物车 Symfony2 Bundle)leaphly.org 可能会有所帮助
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多