2011-09-14 7 views
4

Symfony2를 통해 배우는 중이며 가족 운영 와인 수입업자를위한 작은 이숍을 짓고 있습니다. 천천히 나는 Symfony2 개념에 대한 이해를 얻고 있지만 장바구니를 만드는 것으로 옮겨가는 동안 (적어도 Sf2 표준에 따라)이 방법을 구현하는 방법이 무엇인지 확실하지 않습니다.Symfony2가있는 장바구니

내가 찾고있는 것은 BasketBasketItems과 그 금액을 세션에 저장하고 나중에이 데이터를 체크 아웃에 사용하는 것입니다. 이제 내가 어떻게 든 붙이기 전에이 일을 어떻게 올바르게 수행하고 분리해야하는지에 대한 조언을 듣고 싶습니다.

지금까지 엔티티로 두 개를 만들었지 만 지금 엔티티 클래스 나 리포지토리에 로직을 직접 배치해야하는지, 아니면 선호하는 위치에 로직을 직접 배치해야하는지 확실하지 않습니다.

나는 이것이 너무 넓은 질문이 아니기를 바랍니다. 나는 정말로 튼튼한 장바구니 구현이 작은 일이 아니라는 사실을 잘 알고 있습니다.


사이드 바에서 이미 Symfony2에 대한 검증되고 작동중인 쇼핑 바구니가 있습니까?

답변

5

엔티티 및 리포지토리를 만들 때 일반적으로 Entity 클래스에는 단일 Entity에서 작동하는 데 필요한 논리가 포함되어야하며 Repository 클래스에는 엔티티 그룹에서 작동하는 데 필요한 논리가 포함되어야합니다.

간단한 예 : 당신은 유로 달러에서 항목의 가격을 변환하고 싶다면

  • , 당신은 BasketItem::convertCurrencyTo($currencyType)있을 것입니다. 단일 Entity에서 작동하는 코드입니다.

  • BasketItems $ 10 - $ 20 사이의 가격을 찾으려면 BasketItemRepository::findByPriceRange($min, $max)을 사용하십시오. 이것은 엔티티 그룹에서 작동하는 코드입니다. 일대 다 또는 다 대다 관계가 엔터티를 처리 할 때

IMO, 일이 약간의 혼란을 얻을 수 있습니다. Basket에는 BasketItems이 많고 하나의 User에는 Basket이라는 하나가 있다고 생각합니다. 따라서 BasketItemsUser을 가져 오려면 다음과 같이 할 수 있다고 가정하는 것이 합리적이라고 생각합니다.
$user->getBasket()->getBasketItems().

이 예제에는 매우 기본적인 쿼리이기 때문에 리포지토리가 사용되지 않습니다. 좀 더 구체적인 것을해야 할 경우, User이 판매에 관심이있는 것과 같이 BasketItemRepository::findWhereOnSaleForBasket($BasketId)과 같은 것을 사용할 수 있습니다. User 또는 Basket 클래스에 직접 비슷한 메서드를 추가하는 것을 막을 수는 없지만 쿼리의 기본 '대상'이 BasketItem이므로 해당 Entity의 Repository 클래스에 속해 있다고 생각합니다.

당신은 장바구니를 구현하는 것이 작은 일이 아니라고 말합니다.그러나 여러분이 묻는 질문은 Symfony2에 국한되지 않습니다 (이 경우 Doctrine 2에 관한 것입니다). 그래서 다른 오픈 소스 쇼핑 카트를 확인하고 그들이하는 일을 연구하면 도움이 될 것이라고 생각합니다. symfony2가 실제로 가질 수있는 유일한 영향은 코드를 번들 내에서 분리하는 방법을 결정해야한다는 것입니다.

희망이 도움이됩니다.

+0

통찰력을 가져 주셔서 감사합니다! – Czechnology

+0

'판매 시점'과 관련하여 doctrine2 컬렉션을 필터링하는 데 사용할 수있는 기준을 잊지 마세요. - http://docs.doctrine-project.org/ko/latest/reference/working-with-associations.html # filtering-collections - 내 경험에서 간과 되긴하지만 깔끔한 해결책이 될 수 있습니다. – benlumley

4

Vespolina이라는 전자 상거래 번들이 있으며 여기에는 cart도 있습니다.

+0

위 링크가 깨진 경우 http://vespolina.org/를 확인하십시오. Leaphly (장바구니 Symfony2 번들)를 확인하는 것이 도움이 될 수 있습니다. http://leaphly.org/ –

+0

@MarcoMatarazzi : 내 게시물을 수정하는 것은 어떻습니까? – Raffael