Корзина с Symfony2 - PullRequest
       8

Корзина с Symfony2

4 голосов
/ 14 сентября 2011

Я учусь на Symfony2, пока создаю небольшой интернет-магазин для семейного импортера вина. Постепенно я начинаю понимать концепцию Symfony2, но, переходя к созданию корзины покупок, я не совсем уверен, каким будет правильный (по крайней мере, в соответствии со стандартами Sf2) способ реализации этого .

Я ищу простое Basket, которое хранит BasketItems и их количество в сессиях, а затем использует эти данные при оформлении заказа. Теперь, прежде чем я как-нибудь склею это, я хотел бы услышать совет о том, как это должно быть сделано и правильно разделено.

Пока что я создал их как сущности, и теперь я не уверен, стоит ли мне помещать логику прямо в классы сущностей или репозитории или где желательно?

Надеюсь, это не слишком широкий вопрос. Я хорошо осознаю тот факт, что действительно надежная реализация корзины покупок - это не маленькая работа.


На заметке, есть ли уже проверенные и работающие корзины для покупок для Symfony2?

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Общее правило при создании сущностей и репозиториев состоит в том, что класс сущностей должен содержать логику, необходимую для работы с одной сущностью, а классы репозитория содержат логику, необходимую для работы с группами сущностей.

Простой пример:

  • Если вы хотите конвертировать цену предмета из долларов в евро, вы получите BasketItem::convertCurrencyTo($currencyType). Это код, который работает с одним объектом.

  • Если вы хотите найти все BasketItems, цена которых составляет от 10 до 20 долларов, вы должны использовать BasketItemRepository::findByPriceRange($min, $max). Это код, который работает с группой сущностей.

ИМО, вещи могут стать немного запутанными, когда имеешь дело с сущностями, которые имеют отношения один ко многим или многие ко многим. Я бы предположил, что у одного Basket есть много BasketItems, а у одного User есть одно Basket. Поэтому я думаю, что разумно предположить, что для получения BasketItems a User, интересующего вас, вы можете сделать что-то вроде этого:
$user->getBasket()->getBasketItems().

Обратите внимание, что в этом примере не используется репозиторий, потому что это очень простой запрос. Если вам нужно сделать что-то более конкретное, например, найти, что BasketItems a User заинтересован в том, чтобы быть в продаже, вы можете использовать что-то вроде BasketItemRepository::findWhereOnSaleForBasket($BasketId). Ничто не мешает вам добавить подобный метод непосредственно в классы User или Basket, но я чувствую, что поскольку основной «целью» вашего запроса является BasketItem, он принадлежит классу репозитория этого объекта.

Вы упоминаете, что внедрение корзины для покупок - задача не из легких, и вы правы. Но вопросы, которые вы задаете, на самом деле не ограничиваются Symfony2 (в данном случае это больше касается Doctrine 2), поэтому я думаю, что это может быть полезно, если вы посмотрите другие корзины с открытым исходным кодом и изучите, что они делают. Я думаю, что единственное влияние, которое Symfony2 действительно может оказать, - это заставить вас решить, как разделить ваш код на пакеты.

Надеюсь, это поможет!

4 голосов
/ 14 сентября 2011

Доступен пакет электронной коммерции под названием Vespolina , который также предоставляет корзину .

...