CoreShop Storage List Component

Storage List Component helps you with Lists/Collections of Objects like a Cart, Wishlist or Compare List.

Usage

To use it you need to have 3 models:

The component already provides you with a basic implementation of Storage List and Storage Item. You need to implement the StorageListProduct yourself.

To now mutate lists, the component gives you a Storage List Modifier, which takes care about creating and persisting the List.

Basic usage, Wishist example

For now, lets create a very basic Session based Wishlist:

We need to have following things:

  • A Factory class for the Wishlist
  • A Factory class for the Wishlist Item
  • A StorageListManager to get the current list (more like a repository actually)
  • A StoreListModifier

CoreShop gives you Basic classes for these 4 things, we just need to instantiate them:


use Symfony\Component\HttpFoundation\Session\Session;

use CoreShop\Component\StorageList\Model\StorageList;
use CoreShop\Component\StorageList\Model\StorageListItem;
use CoreShop\Component\Resource\Factory\Factory;
use CoreShop\Component\StorageList\SessionStorageManager;
use CoreShop\Component\StorageList\SessionStorageListModifier;

$session = new Session();
$session->start();

$wishlistFactory = new Factory(StorageList::class);
$wishlistItemFactory = new Factory(StorageListItem::class);

$wishlistManager = new SessionStorageManager($session, 'wishlist', $wishlistFactory);
$wishlistModifier = new SessionStorageListModifier($wishlistItemFactory, $wishlistManager);

//Now we can start putting data into our List
$list = $wishlistManager->getStorageList();

//Fetch our Product which implements CoreShop\Component\StorageList\Model\StorageListProductInterface
$product = $productRepository->find(1);


$listItem = $wishlistItemFactory->createNew();
$listItem->setProduct($product);
$listItem->setQuantity($quantity);

//Lets add our Product
$listItem = $wishlistModifier->addToList($list, $listItem);

//If we now want to remove it, we can either use the $listItem, or the Product
//To do that with our item, we simply call
$wishlistModifier->removeFromList($list, $listItem);