Magento 2 kann den Admin-Rasterfehler nicht verfolgen: Schwerwiegender Fehler: Die Methode Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () darf keine Ausnahme auslösen

9

Aufgrund der hohen Abhängigkeit von XML-Dateien fällt es mir sehr schwer, die Ursache dieses Fehlers beim Erstellen eines benutzerdefinierten Administratorrasters herauszufinden:

Schwerwiegender Fehler: Die Methode Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () darf keine Ausnahme in C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php online auslösen 0

Ich versuche, ein Admin-Raster für die sales_shipment_itemTabelle zu erstellen .

Bisher habe ich:

  1. Wenn Sie xdebug verwenden und es in die __toString()Methode der Result-Klasse einfügen , wird der tatsächliche Fehler nicht angezeigt

  2. Ich habe var_dumpdie Variablen innerhalb der __toString()Methode -ed

  3. Ich habe den Entwicklermodus in Magento 2 aktiviert

  4. Ich habe das überprüft var/logsund es zeigt nichts hilfreiches

Ich habe erfolgreich andere benutzerdefinierte Admin-Raster erstellt, aber der Versuch, den tatsächlichen Fehler herauszufinden, ist wie eine Nadel im Heuhaufen. Hat jemand einen besseren Weg gefunden, diese zu debuggen? Ich habe alle Grid-XML-Dateien di.xmlund Modelle durchgesehen und alles sieht in Ordnung aus.

Kevin Chavez
quelle
Machen Sie einen großen Try / Catch-Block Magento\Ui\TemplateEngine\Xhtml\Result::__toString(), fangen Sie die Ausnahme ab und protokollieren Sie sie oder drucken Sie sie aus. Das hätte M2 sowieso tun sollen.
Nevvermind
Ja, das ist es, was bereits in Result.php vorhanden ist: } catch (\Exception $e) { $this->logger->critical($e->getMessage()); $result = $e->getMessage(); }Der Fehler ist das, was ich bereits gepostet habe. Wenn ich diese Fehler zuvor hatte, hat dies normalerweise mit fehlenden di.xml-Injektionen zu tun, aber diese können nicht ohne Vermutung debuggt werden, weshalb ich diese Frage gestellt habe.
Kevin Chavez
@ KevinJavitz, hast du das behoben? Ich habe das gleiche Problem.
MGento

Antworten:

4

Der Fehler, den Sie erhalten, wird tatsächlich ausgelöst vendor\magento\module-ui\Component\Wrapper\UiComponent.php.

Es wird jedoch nicht in Zeile 0 ausgelöst, sondern wenn das Ergebnis in der folgenden Methode in der return-Anweisung in eine Zeichenfolge konvertiert wird :

protected function _toHtml()
{
    foreach ($this->getChildNames() as $childName) {
        $childBlock = $this->getLayout()->getBlock($childName);
        if ($childBlock) {
            $wrapper = $this->blockWrapperFactory->create([
                'block' => $childBlock,
                'data' => [
                    'name' => 'block_' . $childName
                ]
            ]);
            $this->component->addComponent('block_' . $childName, $wrapper);
        }
    }

    $result = $this->component->render();
    return (string)$result;
}

Folgendes können Sie versuchen, um Ihr Problem zu beheben:

  • Überprüfen Sie, was $resultenthalten ist, bevor die Zeichenfolgenkonvertierungs- und Rückgabeanweisung aufgerufen wird
  • Informieren Sie sich über die Komponente , die ein Problem verursacht, indem Sie anrufen $component->getName(), $component->getComponentName()und finden $component->getData()Sie heraus, wo das Problem liegt
Raphael beim digitalen Pianismus
quelle
2

Dieser schwerwiegende Fehler trat mir auch auf, als ich eine benutzerdefinierte Auflistung / ein benutzerdefiniertes Raster hinzufügte. Ich habe dieses Problem behoben, indem ich den Konstruktor geändert und die korrekte Erfassung für meine Datenliste / mein Raster im Datenprovider-Konstruktor initiiert habe. Beispiel für ein benutzerdefiniertes Raster DataProvider.php

use Acme\CustomModule\Model\ResourceModel\Entity\Listing\CollectionFactory;

class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
{
    public function __construct(
        $name,
        $primaryFieldName,
        $requestFieldName,
        CollectionFactory $collectionFactory,
        array $meta = [],
        array $data = []
    ) {
        parent::__construct($name, $primaryFieldName, $requestFieldName, 
        $meta, $data);
        $this->collection = $collectionFactory->create();
    }

    public function getData(): array
    {
        $collection = $this->getCollection();
        return $collection->toArray();
    }
}

Sie müssen jedoch \ Acme \ CustomModule \ Model \ ResourceModel \ Entity \ Listing \ Collection erstellen, um die Daten im Datenprovider abzurufen

Transversus
quelle
1

Wenn Sie M1 nach M2 migriert haben, tritt während der Cmd-Ausführung ein Fehler unterhalb des Fehlers auf. Der angeforderte Speicher wurde nicht gefunden. Überprüfen Sie das Geschäft und versuchen Sie es erneut.

Bitte ändern Sie die Vendor Module-Store- Dateien nicht :

  • /vendor/magento/module-store/Model/StoreManager.php oder

    /vendor/magento/module-store/Model/StoreRepository.php

Wenden Sie einfach die folgenden Schritte an:

Ich bin erst kürzlich nach der Migration von Magento 1.9.3.8 auf 2.3.0 auf dieselbe Situation gestoßen und hoffe, dass meine Antwort hilfreich sein kann. Das Problem bestand darin, mehrere Geschäfte zu löschen, von denen 96 genau waren. Ich habe alle anderen Antworten hier ausprobiert, aber immer noch den gleichen Fehler erhalten.

Das Update für mich war das Entfernen der alten Speicherdaten aus den "core_config_data" . Das Problem ist, dass Magento beim Laden der Laufzeitkonfigurationsdaten die alten Speicher findet und versucht, diese aufzulösen. Vor dem Bereinigen der Daten aus der Datenbank empfehle ich dringend, die folgende SELECT-Abfrage auszuführen, um sicherzustellen, dass Sie die richtigen Speicher löschen.

SELECT * FROM core_config_data WHERE scope = 'speichert';

WARNUNG: Stellen Sie sicher, dass Sie Ihre Datenbank sichern, bevor Sie diese ausführen!

DELETE FROM core_config_data WHERE scope_id! = 1 AND scope = 'speichert';

Führen Sie nun alle magento Befehle können Sie das sehen , „Der Laden, der angefordert wurde , wurde nicht gefunden. Überprüfen Sie den Laden und versuchen es erneut“ fixiert Abfrage

Schwerwiegender Fehler: Die Methode Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () darf keine Ausnahme in C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php online auslösen 0

Überprüfen Sie jetzt Ihren Administrator über schwerwiegenden Fehler auch behoben blahhh ... blahh ...

(Hinweis: - Schwerwiegender Fehler_Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString (), abhängig vom Speichermodul.

Nikunj Panchal
quelle
0

Nach unzähligen Stunden und vielen Schlägen mit dem Kopf gegen den Schreibtisch stellte ich fest, dass ich diesen Fehler bekam, weil ich xdebug (was erstaunlich ist!) Verwendete, um bei einer Funktion auf niedriger Ebene einen Haltepunkt zu setzen, nämlich Magento\Ui\TemplateEngine\Xhtml\Result::__toString()um zu testen.

Anscheinend hat die Ausgabe des Debuggers tatsächlich einen Fehler ausgelöst, der dazu führte, dass die __toString-Methode mich anschrie.

Ich wurde verrückt, weil sich der Fehler nur zeigte, wenn ich den Debugger eingeschaltet hatte und dachte, dass er möglicherweise etwas mit dem AJAX-Aufruf beim Auffüllen der UI-Liste zu tun hat. Das Ausschalten schien zu funktionieren, es lohnt sich also, es auszuprobieren. Ich bin mir nicht sicher, wie die Haltepunktfunktionalität von xdebug (speziell in IntelliJ-Produkten ... möglicherweise) funktioniert, außer dass Sie einen Haltepunkt mit der Zeile aufrufen können xdebug_break(). Es ist sehr wahrscheinlich, dass ein Haltepunkt in der __toString-Methode auf jeden Fall nur eine dumme Sache ist.

Vermutlich können wir noch nicht alles dynamisch debuggen ... Eines Tages!

Ich hoffe wirklich, dass dies jemand anderem hilft.

Nathaniel Rogers
quelle