IT Wiki: Shopware 6

Weitere Shopware 6 Beiträge:

Schnell-Referenz: Häufig verwendete Code-Schnipsel und Anweisungen für Entwickler.

Themes & Templates

# Ein Theme erstellen
bin/console theme:create MyfavThemeNameSnakeCase

# Wenn ein Child-Theme die Config-Werte von einem anderen Parent-Theme erben soll
# muss das Theme nach der Installation und vor der Aktivierung noch über die Kommando-Zeile aktualisiert werden,
# weil Shopware sonst die Konfiguration nicht sauber übernimmt.
# (Fehlermeldung bspw.: Unable to compile the theme "MyThemeName". Undefined variable $parent-settings-border-radius: /usr/www/users/shopware/custom/plugins/ParentTheme/src/Resources/app/storefront/src/scss/overrides.scss on line 20, at column 1)
# (Thanks to: https://forum.shopware.com/t/theme-vererbung-2-themes/68481/19 )
bin/console theme:refresh

Services in Controller, Subscriber und ServiceDecorator

# Im Subscriber
<service id="Swag\BasicExample\Subscriber\MySubscriber">
	<argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
	<tag name="kernel.event_subscriber"/>
</service>

# Im Controller Controller
<service id="Myfav\Superplugin\Storefront\Controller\MyController" public="true">
	<call method="setContainer">
		<argument type="service" id="service_container" />
	</call>
	<argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
</service>

PluginConfiguration auslesen

Controller, Subscriber und ServiceDecorator werden in der service.xml definiert. Dort ist eine Übergabe von weiteren Services problemlos möglich. Um die Plugin-Konfiguration auszulesen, verwenden wir immer den SystemConfigService.

# use
use Shopware\Core\System\SystemConfig\SystemConfigService;

# Konfiguration auslesen
$myConfig = $this->systemConfigService->get('MeinPluginName.config');

Mit einem Respository arbeiten

# 1. Eine Migration erstellen

# 2. Entity erstellen, bestehend aus:
# a) Collection 
# b) Definition
# c) Entity
# d) Eintrag in der Datei services.xml als neuen Service

# 3. Per DI in der service.xml im Ziel-Controller oder Subscriber injizieren
<argument type="service" id="myfav_defined_entity.repository" />

# 4. In Controller oder Subscriber Constructor übernehmen
private $myfavDefinedEntityRepository;

public function __construct($myfavDefinedEntityRepository) {
    $this->myfavDefinedEntityRepository = $myfavDefinedEntityRepository;
}

# 5. Datensatz in der Datenbank erzeugen
$this->myfavDefinedEntityRepository->create([
	[
		'email' => $email,
		'customerId' => $customerId,
		'orderId' => $order->getId(),
		'dateConfirmedInCheckout' => new \DateTime()
	]
], $context);

# 6. Context abholen
## 6.a) Context in einem Subscriber abholen
### Die Methoden eines Subscribers verfügen i.d.R. über ein Event. Dieses Event bringt den Context mit:
$context = $event->getContext();

## 6.b) Context in einem Controller abholen
### Externe Referenz auf Context-Klasse angeben
use Shopware\Core\Framework\Context;

### In den Methoden, die per Route angesprochen werden, kann der Context automatisch per DI bezogen werden:
/**
* @Route("/hello-world", name="frontend.helloworld", methods={"GET"})
*/
public function helloworld(Context $context) {

CLI - Kommandozeileninterface


# Theme kompilieren und Cache leeren.
bin/console theme:compile
bin/console cache:clear

# Javascript und ähnlichen Storefront Kram kompilieren
# Hier direkt mit bash, weil sh unter Umständen nicht funktioniert, wenn die falsche Shell dahinter steckt.
bin/build-storefront.sh

# Administration kompilieren (z.B. um Module zu erstellen)
bin/build-administration.sh

# App deinstallieren/installieren
bin/console app:install --activate MeinTechnischerAppName
bin/console app:uninstall MeinTechnischerAppName

# Datenbank-Migration für ein Plugin starten
/bin/console database:migrate MyPlugin --all

# Assets übernehmen
bin/console assets:install

# Administrator anlegen
php bin/console user:create --admin --email=john@doe.com --firstName="John" --lastName="Doe" --password=johndoe123 --no-interaction johndoe


Ein Admin-Menü hinzufügen

Siehe auch Shopware-Dokumentation: Add custom module

  1. Create /src/Resources/app/administration/src/main.js
  2. Create /src/Resources/app/administration/src/module/my-plugin/index.js
  3. Create /src/Resources/app/administration/src/module/my-plugin/snippet/de-DE.json
  4. Create /src/Resources/app/administration/src/module/my-plugin/snippet/en-GB.json

Request, GET, POST

Dieser Teil orientiert sich stark an Symfony.
Zuerst holt man sich das Request-Object, in einem Controller bspw. einfach über DI in der Methode. Danach kann man die Variablen über das Request-Object abfragen.


    # Use-Anweisung einfügen:
    use Symfony\Component\HttpFoundation\Request;

    # Request-Objekt über die Dependency-Injection laden:
    public function meineFunktion(Request $request): JsonResponse {

    # Daten abrufen:
    $id = $request->query->get('id');       // get Anfrage
    $id = $request->request->get('id');     // post Anfrage