Die Shopware Command Line Interface (CLI) ist dein direkter Draht zum Herzen des Systems – ein mächtiges Werkzeug, das dir nicht nur Zeit spart, sondern auch Prozesse automatisiert, die über das Admin-Panel umständlich oder gar unmöglich wären. Doch viele Shopware-Nutzer lassen dieses Potenzial ungenutzt liegen, weil ihnen der Einstieg kompliziert erscheint.
Die Kommandozeile in Shopware basiert auf dem bewährten Symfony Console Component und bietet dir Zugang zu Hunderten vorgefertigter Befehle sowie die Möglichkeit, eigene Commands zu entwickeln. Der entscheidende Vorteil: Du kannst direkt mit der Datenbank kommunizieren, Bulk-Operationen durchführen und zeitaufwändige Prozesse im Hintergrund ablaufen lassen.
Die wichtigsten Vorteile auf einen Blick:
| Vorteil | Nutzen für deinen Shop-Alltag |
|---|---|
| Geschwindigkeit | Massenoperationen in Sekunden statt Stunden |
| Automatisierung | Wiederkehrende Aufgaben per Cronjob |
| Ressourcenschonung | Keine Browser-Timeouts bei großen Datenmengen |
| Flexibilität | Individuelle Lösungen für spezielle Anforderungen |
| Debugging | Direkter Einblick in Systemprozesse |
Bevor du mit Shopware Commands durchstarten kannst, benötigst du Zugriff auf die Serverumgebung deines Shops. Das bedeutet in der Praxis:
Sobald du eine SSH-Verbindung hergestellt hast, navigierst du in das Hauptverzeichnis deiner Shopware-Installation. Dort findest du die Datei `bin/console` – dein Tor zur Welt der CLI Commands. Für eine Übersicht der wichtigsten Befehle empfiehlt sich ein Shopware cheat sheet, das alle häufig verwendeten Commands strukturiert auflistet.
php bin/console cache:clear
php bin/console cache:warmup
Diese beiden Befehle gehören zum absoluten Grundrepertoire. Während `cache:clear` den kompletten Cache leert, baut `cache:warmup` ihn intelligent wieder auf. Besonders nach Konfigurationsänderungen oder Plugin-Updates wirst du diese Commands regelmäßig nutzen.
php bin/console dal:refresh:index
php bin/console database:create-migration
Der erste Befehl aktualisiert die Elasticsearch-Indizes – unverzichtbar nach größeren Datenänderungen. Mit dem zweiten erstellst du Migrationen für Datenbankänderungen, falls du eigene Entwicklungen vorantreibst.
php bin/console media:generate-thumbnails
php bin/console media:delete-unused
Fehlende oder falsch skalierte Produktbilder gehören mit diesen Befehlen der Vergangenheit an. Der erste generiert alle Thumbnails neu, der zweite räumt nicht mehr verwendete Medien auf.
php bin/console sales-channel:maintenance:enable
php bin/console sales-channel:maintenance:disable
Statt über das Admin-Panel kannst du den Wartungsmodus auch gezielt für einzelne Sales Channels per Command steuern – praktisch für Updates ohne Komplettausfall.
Ein wichtiger Aspekt bei der Entwicklung ist das Shopware 6 build administration. Dieses Command erstellt die Administration neu und ist besonders nach Plugin-Installationen oder Custom-Entwicklungen erforderlich:
php bin/console bundle:dump
php bin/console system:config:set core.listing.productsPerPage 24
Das wahre Potenzial der Shopware-Kommandozeile entfaltet sich, wenn du eigene Commands entwickelst. Stell dir vor, du möchtest regelmäßig Testdaten generieren, spezielle Berichte erstellen oder wiederkehrende Wartungsaufgaben automatisieren.
1. Command-Klasse anlegen
Erstelle zunächst eine neue PHP-Klasse in deinem Plugin-Verzeichnis unter `src/Command/`:
<?php declare(strict_types=1);
namespace DeineMarke\DeinPlugin\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class DatenbereinigungCommand extends Command
{
protected static $defaultName = 'shop:daten-bereinigen';
protected function configure(): void
{
$this->setDescription('Bereinigt alte Gastkunden und verlassene Warenkörbe')
->addArgument('tage', InputArgument::OPTIONAL, 'Daten älter als X Tage', 30);
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$tage = (int) $input->getArgument('tage');
$output->writeln("Bereinige Daten älter als {$tage} Tage...");
// Hier würde deine Bereinigungslogik stehen
$output->writeln('Bereinigung erfolgreich abgeschlossen!');
return Command::SUCCESS;
}
}
2. Command registrieren
In deiner `services.xml` registrierst du den neuen Command:
<service id="DeineMarke\DeinPlugin\Command\DatenbereinigungCommand">
<tag name="console.command"/>
</service>
3. Command nutzen
Nach dem Cache-Clear steht dein Command zur Verfügung:
php bin/console shop:daten-bereinigen 60
Progress Bars für lange Prozesse:
use Symfony\Component\Console\Helper\ProgressBar;
protected function execute(InputInterface $input, OutputInterface $output): int
{
$items = $this->getItemsToProcess(); // Deine Daten
$progressBar = new ProgressBar($output, count($items));
$progressBar->start();
foreach ($items as $item) {
$this->processItem($item);
$progressBar->advance();
}
$progressBar->finish();
return Command::SUCCESS;
}
Tabellen für übersichtliche Ausgaben:
use Symfony\Component\Console\Helper\Table;
$table = new Table($output);
$table->setHeaders(['Produkt', 'Bestand', 'Status'])
->setRows([
['Smartphone XY', '150', 'Verfügbar'],
['Tablet AB', '0', 'Ausverkauft'],
]);
$table->render();
Erstelle einen Command, der alle wichtigen Wartungsaufgaben bündelt:
# Morgens automatisch per Cronjob
php bin/console cache:clear
php bin/console dal:refresh:index
php bin/console media:generate-thumbnails --batch-size=50
php bin/console scheduled-task:run
Für Updates und neue Releases bietet der Shopware Update CLI eine strukturierte Herangehensweise:
php bin/console system:update:prepare
php bin/console cache:clear
php bin/console database:migrate --all
php bin/console dal:refresh:index
php bin/console cache:warmup
Bei großen Datenmengen:
# Wartungsmodus aktivieren
php bin/console sales-channel:maintenance:enable
# Import durchführen
php bin/console custom:import-products /path/to/products.csv
# System aktualisieren und Wartung beenden
php bin/console dal:refresh:index
php bin/console sales-channel:maintenance:disable
Das Shopware 6 create admin user Command ist besonders hilfreich, wenn du schnell administrative Zugriffe einrichten musst:
php bin/console user:create admin
Für die Plugin-Verwaltung bietet Shopware ebenfalls praktische CLI-Lösungen. Das Shopware 6 update plugin console ermöglicht es, Plugins direkt über die Kommandozeile zu aktualisieren:
php bin/console plugin:refresh
php bin/console plugin:update PluginName
Auch für ältere Shopware-Versionen existieren wichtige Console-Commands. Bei Shopware 5 Console Commands ist besonders das Theme-Kompilieren relevant:
# Shopware 5 compile theme cli
php bin/console sw:theme:cache:generate
Das Shopware 5 compile theme cli Command regeneriert alle Theme-Assets und ist nach Design-Änderungen unverzichtbar.
Problem: "Command not found"
Problem: Memory-Limit bei großen Operationen
Problem: Berechtigungsfehler
Problem: Failed to generate key Shopware 6
Dieser Fehler tritt häufig bei der Erstinstallation auf und kann durch explizite Schlüsselgenerierung behoben werden:
php bin/console system:generate-app-secret
php bin/console system:config:set core.store.apiUri [https://api.shopware.com
]https://api.shopware.com
Für Entwickler, die unter Windows arbeiten, gibt es einige Besonderheiten bei der Nutzung der Shopware console windows. Die PowerShell oder Eingabeaufforderung können manchmal unterschiedliche Verhaltensweisen zeigen:
# Windows Command Prompt
php bin\console cache:clear
# PowerShell
php .\bin\console cache:clear
Zusätzlich kann es hilfreich sein, Shopware shortcuts als Batch-Dateien oder PowerShell-Skripte zu erstellen, um häufig verwendete Befehle zu verkürzen.
protected function processInBatches(array $items, int $batchSize = 100): void
{
$batches = array_chunk($items, $batchSize);
foreach ($batches as $batch) {
$this->processBatch($batch);
// Memory cleanup nach jedem Batch
$this->entityManager->clear();
gc_collect_cycles();
}
}
use Psr\Log\LoggerInterface;
class MeinCommand extends Command
{
private LoggerInterface $logger;
public function __construct(LoggerInterface $logger)
{
parent::__construct();
$this->logger = $logger;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$this->logger->info('Command gestartet', ['parameter' => $input->getArguments()]);
try {
// Deine Logik hier
$this->logger->info('Command erfolgreich beendet');
return Command::SUCCESS;
} catch (\Exception $e) {
$this->logger->error('Command fehlgeschlagen', ['error' => $e->getMessage()]);
return Command::FAILURE;
}
}
}
# Täglich um 2:00 Uhr - Wartungsaufgaben
0 2 * * * /usr/bin/php /var/www/shopware/bin/console maintenance:cleanup
# Jede Stunde - Indizes aktualisieren
0 * * * * /usr/bin/php /var/www/shopware/bin/console dal:refresh:index
# Wöchentlich - Umfassende Bereinigung
0 3 * * 0 /usr/bin/php /var/www/shopware/bin/console system:cleanup --deep
# Beispiel für GitLab CI
deploy:
script:
- php bin/console system:update:prepare
- php bin/console database:migrate --all
- php bin/console cache:clear
- php bin/console cache:warmup
Das Shopware generate attributes Command war besonders in früheren Versionen wichtig für die Datenmodell-Erweiterung. In Shopware 6 erfolgt dies über Custom Fields und entsprechende CLI-Befehle:
php bin/console custom-field:create
php bin/console system:config:set
In kritischen Situationen kann es notwendig sein, ein Plugin ohne Admin-Interface zu deaktivieren. Das Shopware disable plugin datenbank Vorgehen erfolgt dann direkt über SQL oder entsprechende CLI-Commands:
php bin/console plugin:deactivate PluginName
php bin/console plugin:uninstall PluginName
Der Shopware 6 update CLI bietet verschiedene Modi für unterschiedliche Update-Szenarien:
# Sicherheitsupdate
php bin/console system:update:prepare --security-only
# Major-Version Update
php bin/console system:update:prepare --major
# Plugin-spezifisches Update
php bin/console plugin:update --all
# Verschiedene Verbosity-Level
php bin/console mein:command -v # Normal verbose
php bin/console mein:command -vv # Very verbose
php bin/console mein:command -vvv # Debug level
protected function execute(InputInterface $input, OutputInterface $output): int
{
$startTime = microtime(true);
$startMemory = memory_get_usage();
// Deine Command-Logik
$executionTime = microtime(true) - $startTime;
$memoryUsage = memory_get_usage() - $startMemory;
$output->writeln(sprintf(
'Ausführungszeit: %.2f Sekunden, Speicherverbrauch: %s',
$executionTime,
$this->formatBytes($memoryUsage)
));
return Command::SUCCESS;
}
Die wahre Stärke der Shopware 6 Console liegt nicht nur in der Zeitersparnis, sondern in den völlig neuen Möglichkeiten, die sie eröffnen. Du kannst komplexe Datenanalysen durchführen, A/B-Tests automatisiert auswerten, Inventory-Management optimieren oder sogar Machine-Learning-Algorithmen für Produktempfehlungen trainieren – alles direkt aus deiner Shopware-Umgebung heraus.
Stell dir vor, du entwickelst einen Command, der täglich die Performance deiner Kategorieseiten analysiert, automatisch Slow-Loading-Produkte identifiziert und entsprechende Optimierungsvorschläge generiert. Oder einen Befehl, der basierend auf Wetterdaten saisonale Produkte automatisch prominent platziert.
Die Kombination aus Shopware's reichhaltigem Datenmodell und der Flexibilität der Kommandozeile macht solche innovativen Lösungen nicht nur möglich, sondern auch praktisch umsetzbar. Jeder Command, den du heute entwickelst, kann morgen der Baustein für eine automatisierte, intelligente E-Commerce-Lösung sein, die dich von der Konkurrenz abhebt.
Mit diesem Wissen ausgestattet, verwandelst du dich vom reinen Shop-Betreiber zum E-Commerce-Innovator, der die technischen Möglichkeiten von Shopware voll ausschöpft und dabei Zeit für das Wesentliche gewinnt: das Wachstum deines Geschäfts.