mirror of
https://github.com/wearepixel/laravel-cart.git
synced 2026-11-14 13:51:44 +00:00
The command told users to register their driver in config/cart.php under "drivers", but CartManager has no such registration point for custom drivers. The actual mechanism is Cart::extend() called from a service provider's boot() method.
125 lines
2.9 KiB
PHP
125 lines
2.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Wearepixel\Cart\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
class MakeDriverCommand extends Command
|
|
{
|
|
protected $signature = 'cart:make:driver {name : The class name of the custom cart driver}';
|
|
|
|
protected $description = 'Create a new CartDriver implementation in app/Cart/Drivers.';
|
|
|
|
public function handle(): int
|
|
{
|
|
$name = $this->argument('name');
|
|
|
|
if (! preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $name)) {
|
|
$this->error("Invalid class name: [{$name}]. Must be a valid PHP class name.");
|
|
|
|
return self::FAILURE;
|
|
}
|
|
|
|
$directory = app_path('Cart/Drivers');
|
|
$path = "{$directory}/{$name}.php";
|
|
|
|
if (file_exists($path)) {
|
|
$this->error("Driver already exists: app/Cart/Drivers/{$name}.php");
|
|
|
|
return self::FAILURE;
|
|
}
|
|
|
|
if (! is_dir($directory)) {
|
|
mkdir($directory, 0755, true);
|
|
}
|
|
|
|
if (file_put_contents($path, static::stub($name)) === false) {
|
|
$this->error("Failed to write file: {$path}");
|
|
|
|
return self::FAILURE;
|
|
}
|
|
|
|
$this->info("Driver created: app/Cart/Drivers/{$name}.php");
|
|
$this->line(" Register it with <comment>Cart::extend()</comment> in a service provider's boot() method, then set 'driver' to its name in config/cart.php.");
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
|
|
public static function stub(string $className): string
|
|
{
|
|
return <<<PHP
|
|
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Cart\Drivers;
|
|
|
|
use Wearepixel\Cart\Drivers\Contracts\CartDriver;
|
|
|
|
class {$className} implements CartDriver
|
|
{
|
|
private string \$sessionKey;
|
|
|
|
public function __construct(string \$sessionKey)
|
|
{
|
|
\$this->sessionKey = \$sessionKey;
|
|
}
|
|
|
|
public function getSessionKey(): string
|
|
{
|
|
return \$this->sessionKey;
|
|
}
|
|
|
|
public function setSessionKey(string \$sessionKey): void
|
|
{
|
|
\$this->sessionKey = \$sessionKey;
|
|
}
|
|
|
|
public function getDriverName(): string
|
|
{
|
|
return 'custom';
|
|
}
|
|
|
|
public function getItems(): array
|
|
{
|
|
// TODO: retrieve items from your storage backend
|
|
return [];
|
|
}
|
|
|
|
public function putItems(array \$items): void
|
|
{
|
|
// TODO: persist items to your storage backend
|
|
}
|
|
|
|
public function getConditions(): array
|
|
{
|
|
// TODO: retrieve conditions from your storage backend
|
|
return [];
|
|
}
|
|
|
|
public function putConditions(array \$conditions): void
|
|
{
|
|
// TODO: persist conditions to your storage backend
|
|
}
|
|
|
|
public function clearItems(): void
|
|
{
|
|
// TODO: remove only items from your storage backend
|
|
}
|
|
|
|
public function flush(): void
|
|
{
|
|
// TODO: remove both items and conditions from your storage backend
|
|
}
|
|
|
|
public function getSessionModel(): mixed
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
PHP;
|
|
}
|
|
}
|