diff --git a/src/CartManager.php b/src/CartManager.php new file mode 100644 index 0000000..5ca36c4 --- /dev/null +++ b/src/CartManager.php @@ -0,0 +1,72 @@ +config->get('cart.driver', 'session'); + } + + private function sessionKey(): string + { + return $this->container['session']->getId(); + } + + public function createSessionDriver(): CartDriver + { + return new SessionDriver( + $this->container['session'], + $this->sessionKey(), + ); + } + + public function createDatabaseDriver(): CartDriver + { + $config = $this->config->get('cart.storage.database'); + + return new DatabaseDriver( + $config['model'], + $config['id'], + $config['items'], + $config['conditions'], + $this->sessionKey(), + ); + } + + public function createRedisDriver(): CartDriver + { + $config = $this->config->get('cart.drivers.redis', []); + + return new RedisDriver( + $this->container['redis'], + $this->sessionKey(), + $config['connection'] ?? 'default', + $config['ttl'] ?? 604800, + ); + } + + public function createNullDriver(): CartDriver + { + return new NullDriver($this->sessionKey()); + } + + public function createMultiDriver(): CartDriver + { + $names = $this->config->get('cart.drivers.multi', ['session', 'database']); + $drivers = array_map(fn(string $name) => $this->driver($name), $names); + + return new MultiDriver($drivers); + } +}