Fehler nach Update von 6.7.15.1 auf 6.7.16

Hallo,
ich habe den Shop upgedated, lief auch sauber durch, aber jetzt nach dem Update bekomme ich Fehler. Und zwar:

2 Plugins stehen jetzt unter deaktiviert, obwohl sie noch aktiv sind und ich kann das Theme nicht mehr kompilieren.

Im Log sehe ich folgendes:

Uncaught PHP Exception Shopware\Storefront\Theme\Exception\ThemeCompileException: "Unable to compile the theme "TcinnThemeWareModern - Theme-ID: 018fd8429fda728bbfd2e8f335e04ddc". Typed property Shopware\Core\System\SystemConfig\Service\ConfigurationService::$bundles must not be accessed before initialization" at ThemeException.php line 94 {"exception":"[object] (Shopware\\Storefront\\Theme\\Exception\\ThemeCompileException(code: 0): Unable to compile the theme \"TcinnThemeWareModern - Theme-ID: 018fd8429fda728bbfd2e8f335e04ddc\". Typed property Shopware\\Core\\System\\SystemConfig\\Service\\ConfigurationService::$bundles must not be accessed before initialization at .../shopware-sw6/vendor/shopware/storefront/Theme/Exception/ThemeException.php:94)\n[previous exception] [object] (Error(code: 0): Typed property Shopware\\Core\\System\\SystemConfig\\Service\\ConfigurationService::$bundles must not be accessed before initialization at .../shopware-sw6/vendor/shopware/core/System/SystemConfig/Service/ConfigurationService.php:234)"} []
Failed to load plugin extension data {"plugin":"fgitsAutoinvoiceSW6","exception":"Shopware\\Core\\System\\SystemConfig\\Util\\ConfigReader::getTabDefinitions(): Argument #1 ($xml) must be of type DOMElement, DOMComment given, called in ..../shopware-sw6/vendor/shopware/core/System/SystemConfig/Util/ConfigReader.php on line 57"} []
Failed to load plugin extension data {"plugin":"CbaxModulOrderImportAmazon","exception":"Shopware\\Core\\System\\SystemConfig\\Util\\ConfigReader::getTabDefinitions(): Argument #1 ($xml) must be of type DOMElement, DOMComment given, called in .../shopware-sw6/vendor/shopware/core/System/SystemConfig/Util/ConfigReader.php on line 57"} []

Sieht jemand, wo der Fehler liegt? Vielen Dank!

Die drei Plugins sind mit der neuen Shopware-Version noch nicht kompatibel. Abwarten bis Updates dafür rauskommen und erst dann Shopware aktualisieren.

Oder die Fehler in den Plugins bis zu deren Update manuell anpassen.

Danke für die Info. Aber seltsam, dass sie als kompatibel angezeigt werden und auch jeweils in der Beschreibung steht, dass sie 6.7.16 können.

Die meisten Plugin-Entwickler prüfen nicht bei jeder neu entwickelten Version ob diese Kompatibel sind, sondern geben eine pauschale Freigabe für die gesamte 6.6 oder 6.7er Reihe. Daher sind manche Plugins immer sofort kompatibel, manche erst einige Tage später, nach eine wirklichen individuellen Freigabe.

das ist ein Konfigurationsschalter bei den Pluginanbieter ( automatische Kompatibilitätsfreigabe ) :slight_smile:
Am besten einfach ein Ticket bei den Herstellern für das betroffene Plugin aufmachen wenn es Probleme gibt.

Hatte heute das gleiche Problem. Trotz Freigabe wurde der Shop lahm gelegt.
In der Datei custom/plugins/fgitsAutoinvoiceSW6/src/Resources/config/config.xml muss der Kommentar angepasst werden. Ein Ticket wurde bereits erstellt.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/shopware/platform/master/src/Core/System/SystemConfig/Schema/config.xsd">

    <!--
      ~ Copyright (c) 2020. GOLLE IT.
      ~ @author Andrey Grigorkin <andrey@golle-it.de>
      -->

    <card>

Gruß
Marco

Dass die beiden als kompatibel angezeigt werden, passt schon. Das ist ein Fehler in Shopware 6.7.16 selbst, nicht in den Plugins.

Mit 6.7.16 können Plugin-Einstellungen Tabs haben, dafür wurde das Einlesen der config.xml umgebaut. Seitdem nimmt Shopware den ersten Knoten der Datei als <config>. Steht davor ein Kommentar (oft der Copyright-Hinweis vom Hersteller), kommt genau dein Fehler mit „DOMComment given“. Auf GitHub ist das schon gemeldet (Issue #22418), ein Fix liegt als Pull Request bereit, ist aber noch in keinem Release.

Marcos Weg ist deshalb der richtige: den Kommentar in der config.xml vom Plugin löschen oder hinter <config> verschieben. Welche Plugins betroffen sind, findest du so:

grep -lzP '^\s*(<\?xml[^>]*\?>\s*)?<!--' custom/plugins/*/src/Resources/config/config.xml vendor/*/*/src/Resources/config/config.xml 2>/dev/null

Danach bin/console cache:clear und bin/console theme:compile. Der Theme-Fehler mit $bundles hängt sehr wahrscheinlich am selben Problem, beim Kompilieren werden die Plugin-Einstellungen nämlich mitgelesen. Dass die zwei Plugins als deaktiviert dastehen kommt vermutlich auch daher, bin/console plugin:list zeigt dir ob sie wirklich noch aktiv sind.

Bei einem Plugin-Update kann der Kommentar wieder drin sein, solange Shopware den Fix noch nicht ausgeliefert hat. Das Ticket beim Hersteller, wie b.david schreibt, lohnt sich also trotzdem.

Ich habe die beiden Plugins entsprechend angepasst, das ist jetzt soweit ok erst mal. Aber der Fehler mit dem Theme bleibt trotzdem.

Ich kann zwar bin/console cache:clear und bin/console theme:compile ausführen, der Cache wird auch geleert, aber beim compile gibt es weiterhin den $bundles Fehler.

Ich kann das Theme auch nicht auf das default Theme ändern, gleicher Fehler. Und Updates von Erweiterungen gehen auch nicht, da ja immer das Theme kompiliert wird am Ende.

Jemand eine Idee, wir ich den $bundles Fehler beheben kann?

Dann lag ich mit dem Theme-Fehler falsch, das ist ein eigenes Problem. Sieht nach einem Plugin aus, das den ConfigurationService von Shopware erweitert.

Hintergrund: In 6.7.16 hat der ConfigurationService neue Methoden bekommen, und das Kompilieren vom Theme nutzt jetzt die neue. Wenn ein Plugin die Klasse mit extends erweitert, einen eigenen Konstruktor hat und nur die alten Methoden überschreibt, landet der Aufruf in der Original-Methode. Die greift auf $bundles zu, das ohne den Konstruktor vom Original nie gesetzt wurde. Genau das sagt die Fehlermeldung. Ich hab das mit einem kleinen Nachbau geprüft, die Meldung ist identisch.

Welches Plugin das ist, findest du so:

grep -rlE 'extends\s+\\?(Shopware\\Core\\System\\SystemConfig\\Service\\)?ConfigurationService\b' custom/plugins vendor/store.shopware.com --include=*.php 2>/dev/null

Oder du schaust, welche Klasse Shopware für den Service tatsächlich verwendet:

bin/console debug:container 'Shopware\Core\System\SystemConfig\Service\ConfigurationService'

Steht unter Class nicht der Shopware-Namespace, hast du den Kandidaten. Ist es nicht das Theme selbst, kannst du das Plugin mit bin/console plugin:deactivate <Name> kurz deaktivieren, dann cache:clear und theme:compile. Danach dem Hersteller schreiben, dass sein Plugin die neue Methode getResolvedSystemConfigDefinition nicht abdeckt. Wenn es das Theme ist, bleibt eigentlich nur Hersteller-Update abwarten oder zurück auf 6.7.15.1 vom Backup.

Vielen Dank @Julian_Braeucker

Das hat auf jeden Fall geholfen, das Rechnungs-Plugin ist dafür verantwortlich, den Anbieter habe ich angeschrieben. Aus Erfahrung bin ich sicher, dass da recht zügig ein Update kommen wird.

Ich konnte das Plugin aber nicht über die Konsole deaktivieren. Mit bin/console plugin:deactivate fgitsAutoinvoiceSW6 kommt immer noch der $bundles Fehler, weil ein Compile fehlschlägt.
Erst das Deaktvieren in der Datenbank bringt dann den Erfolg. Dann lässt sich das Theme kompilieren und alles funktioniert wieder.

Also bleibt das Rechnungs-Plugin erst mal deaktiviert, bis es ein Update dafür gibt. Und hoffentlich wird es dann auch von Shopware recht zügig eine 6.7.16.1, wo der andere Fehler behoben ist.

Danke nochmal an alle für die tolle Hilfe! :waving_hand:

Hallo zusammen,

hier Robin von GOLLE IT. Danke für die genaue Analyse in diesem Thread. Beide beschriebenen Fehler kommen aus unseren Plugins „PDF & E-Rechnung automatisch per E-Mail“ (AutoInvoice) und „Tickets for Shopware“ und sind behoben:

  1. ConfigReader::getTabDefinitions(): ... DOMComment given: Shopware 6.7.16.0 erwartet <config> als ersten Eintrag der config.xml, bei uns stand dort ein Kommentar.
  2. ConfigurationService::$bundles must not be accessed before initialization beim Kompilieren des Themes: AutoInvoice hat die neue Methode getResolvedSystemConfigDefinition aus 6.7.16.0 noch nicht abgedeckt.

Die Korrekturen sind in AutoInvoice 6.6.19 und Tickets 3.17.2 enthalten, beide sind im Shopware Store verfügbar. Eine von Hand angepasste config.xml wird beim Update durch die korrigierte Fassung ersetzt.

Wer AutoInvoice deaktiviert hat, um das Theme wieder kompilieren zu können:

bin/console plugin:refresh
bin/console plugin:update fgitsAutoinvoiceSW6
bin/console plugin:activate fgitsAutoinvoiceSW6
bin/console cache:clear
bin/console theme:compile

Beide Versionen sind auf Shopware 6.7.16.0 mit PHP 8.2 bis 8.5 geprüft. Falls danach noch etwas auftritt, schreibt uns gern über unseren Support.

Viele Grüße
Robin

Läuft alles wieder perfekt. Vielen Dank für die schnelle Reaktion!