2011-09-14 17 views
4

私はSymfony2で自分のやり方を学んでいますが、家族経営のワインの輸入業者のために小さなエプホットを建設しています。ゆっくりと私はSymfony2のコンセプトを理解していますが、ショッピングカートの構築に移りながら、(少なくともSf2規格に準拠)の方法でこれを実装する方法がよく分かりません。Symfony2のショッピングカート

私が探しているのは、BasketBasketItemsとその金額をセッションに保存した後、このデータをチェックアウトで使用する単純なものです。私が行く前に、何とか一緒に接着剤を貼り付ける前に、これをどうやって正しく分けるべきかアドバイスを聞きたいと思います。

これまでのところ、2つのエンティティを作成しましたが、エンティティクラスやリポジトリに論理を直接配置する必要があるかどうか、あるいは、好ましくはどこに配置するべきかわかりません。

これはあまりにも広い質問ではないと思います。私は本当に堅牢なショッピングカートの実装は小さな仕事ではないという事実をよく承知しています。追記で


、周りすでにSymfony2のためのいくつかの実証済みと作業ショッピングバスケットがありますか?

答えて

5

エンティティとリポジトリを作成する際の一般的な規則は、エンティティクラスに単一のエンティティで操作するために必要なロジックが含まれていなければならず、リポジトリクラスにはエンティティのグループを操作するために必要なロジックが含まれているということです。

簡単な例:あなたはユーロに対してドルからアイテムの価格を変換したい場合は

  • 、あなたはBasketItem::convertCurrencyTo($currencyType)を持っているでしょう。これは、単一のエンティティで動作するコードです。

  • 価格が$ 10〜$ 20のBasketItemsをすべて検索する場合は、BasketItemRepository::findByPriceRange($min, $max)を使用します。これは、エンティティのグループで動作するコードです。

IMOでは、1対多または多対多の関係を持つエンティティを処理するときに、少し混乱することがあります。 Basketには多くのものがあり、UserにはBasketというものが1つあると思います。したがって、BasketItemsUserを取得するには、次のようなことが考えられます:
$user->getBasket()->getBasketItems()と仮定することは合理的です。

非常に基本的なクエリであるため、この例ではリポジトリは使用されていません。より具体的な何かをする必要がある場合、 Userが売れていることに興味があるように、BasketItemRepository::findWhereOnSaleForBasket($BasketId)のようなものを使用できます。 UserまたはBasketクラスに同様のメソッドを直接追加することを止めるものはありませんが、クエリのメイン 'ターゲット'がBasketItemであるため、そのエンティティのリポジトリクラスに属していると思います。

あなたは、ショッピングカートを実装することは小さな仕事ではなく、あなたが正しいと言います。しかし、あなたが求めている質問は、実際にSymfony2に限定されているわけではありません(この場合、Doctrine 2についてのことです)。他のオープンソースショッピングカートをチェックして、彼らが何をしているのか調べると役に立ちます。 symfony2が実際に唯一の影響を与えるのは、バンドル内でコードを分割する方法を決定することです。

希望すると便利です。

+0

あなたの洞察をいただきありがとうございます! – Czechnology

+0

ちょうどあなたの「どこで売れているのか」のことを考えてください - doctrine2コレクションをフィルタリングするために使用できる基準を忘れないでください - http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html #filtering-collections - 私の経験で見落とされていますが、きちんとした解決策になることができます。 – benlumley

4

Vespolinaと呼ばれる利用可能な電子商取引バンドルがあり、cartもあります。

+0

上記のリンクが壊れている場合は、チェックアウトhttp://vespolina.org/。 Leaphly(カートSymfony2 Bundle)をチェックアウトすると役に立つかもしれません。http://leaphly.org/ –

+0

@MarcoMatarazzi:投稿を編集するのはどうですか? – Raffael