Erstmal ganz herzlichen Dank für deine Zeit und deine Hilfe!
In der tat haben deine Vorschläge bewirkt, dass das Produkt jetzt instanziert werden kann über
PHP-Code:
$objProduct = Standard::findByPk('88');
.
Dies habe ich aber nur testhalber eingefügt, und das ging vorher noch nicht. Vermutlich hast du das fehlende
PHP-Code:
$GLOBALS['TL_DCA']['tl_iso_product']['attributes'] = [];
beim Debuggen dort bemerkt.
(Ich war gestern auch schon an der Stelle, wusste aber nicht, wie der Fehler behoben werden kann.)
Jedoch, leider, lässt sich immer noch nicht das Produkt über das Cart Item holen:
PHP-Code:
$objProduct = $this->objItem->getProduct() ?? null;
liefert null!
Habe beide Wege verglichen:
In beiden Fällen schlägt das Holen der Klasse für den ModelType "standard" fehl.
Beim Instanzierung des Produkts:
PHP-Code:
$strClass = static::getClassForModelType($objType->class);
und beim getProduct():
PHP-Code:
$strClass = Product::getClassForModelType($this->type);
Beim Instanzieren geht es trotzdem, da anschliessend ein Fallback auf die aktuelle Klasse erfolgreich ist:
PHP-Code:
$strClass = \get_called_class();
Beim getProduct() wird das nicht versucht (und wäre auch falsch, da die aktuelle Klasse ja ProductCollectionItem ist).
Kurzum:
Ich weiß hier nicht weiter. Leider. Die vermutlich entscheidende Frage ist nun, warum die Klasse für den ModelType nicht geholt werden kann.
Dies ist die betreffende Methode:
PHP-Code:
/** * Get class name for given model type * * @param string $strName * * @return string|null */ public static function getClassForModelType($strName) { return static::$arrModelTypes[$strName] ?? null; }
Debuggen lässt sich das ja nicht mehr.
Registriert werden die ModelTypes in der config.php von Isotope. habe versucht, diese über meine Kopie der AppKernel.php aus dem Contao Core einzubinden.
Das führt zu diesem Fehler (vermutlich weil ich PHP 8 verwende):
Fatal error: Uncaught Error: Call to undefined function array_insert() in /shared/httpd/nahati/contao-isotope-stock/tests/Integration/app/config/config.php:17
Habe daraufhin diese Funktion ersetzt durch
Dann kommt gleich der nächste Fehler:
Fatal error: Uncaught Error: Undefined constant "TL_MODE" in /shared/httpd/nahati/contao-isotope-stock/tests/Integration/app/config/config.php:46
Dies lässt sich nicht im construct der Testklasse setzen, habe daher eine bootstrap.php hinzugezogen.
Dann musste ich noch viel in der config.php auskommentieren.
Dann habe ich die Isotope config also erfolgreich wie es scheint eingebunden. ABER: Immer noch sind die ModelTypes nicht vorhanden.
Was da jetzt noch fehlt, ist völlig unklar. UND: Kann es wirklich sein, dass man um einen Test lauffähig zu machen, so tief in Contao und Isotope eindringen muss und auf Vermutung irgendwelche Dinge ergänzt, die sich nicht von selber erklären und dann auch nicht zum Erfolg führen...
Das ist einfach eine Vorgehensweise, die ich unglaublich ätzend finde. ABER: Da es ja kein funktionierendes Beispiel zu geben scheint - jedenfalls hat man mir das bisher trotz Nachfrage nicht gezeigt - und auch keine Doku dazu, hangele ich mich hier von Hölzchen auf Stöckchen.
Lesezeichen