Magento 2 Impossibile tracciare l'errore di griglia amministratore: errore irreversibile: il metodo Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () non deve generare un'eccezione


9

A causa dell'elevata dipendenza dai file XML, ho difficoltà a capire la causa di questo errore durante la creazione di una griglia di amministrazione personalizzata:

Errore irreversibile: Metodo Magento \ Ui \ TemplateEngine \ Xhtml \ Risultato :: __ toString () non deve generare un'eccezione in C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php on line 0

Sto cercando di creare una griglia di amministrazione per la sales_shipment_itemtabella.

Finora ho:

  1. Utilizzato xdebug e inserito nel __toString()metodo della classe Result, non mostra quale sia il vero errore

  2. Ho modificato var_dumple variabili all'interno del __toString()metodo

  3. Ho attivato la modalità sviluppatore in Magento 2

  4. Ho controllato var/logse non mostra nulla di utile

Ho creato con successo altre griglie personalizzate di amministrazione, ma cercare di capire l'errore reale è come un ago in un pagliaio. Qualcuno ha trovato un modo migliore per eseguire il debug di questi? Ho esaminato tutta la griglia xml di.xml, e i modelli e tutto sembra a posto.


Fai un grande tentativo / blocco blocco Magento\Ui\TemplateEngine\Xhtml\Result::__toString(), cattura l'eccezione e accedi, o stampalo. È quello che M2 avrebbe dovuto fare comunque.
nevvermind

sì, è quello che c'è già in Result.php:, } catch (\Exception $e) { $this->logger->critical($e->getMessage()); $result = $e->getMessage(); }l'errore è quello che ho già pubblicato. Quando ho avuto questi errori prima di solito ha a che fare con iniezioni di.xml mancanti ma questi sono impossibili da eseguire il debug senza solo indovinare, motivo per cui ho pubblicato questa domanda.
Kevin Chavez,

@KevinJavitz, hai risolto questo problema? Sto avendo lo stesso problema.
MGento,

Risposte:


4

L'errore che stai ricevendo è effettivamente innescato vendor\magento\module-ui\Component\Wrapper\UiComponent.php.

Tuttavia, non viene attivato alla riga 0 ma quando il risultato viene convertito in una stringa nel seguente metodo nell'istruzione return :

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;
}

Ecco cosa puoi provare a eseguire il debug del tuo problema:

  • controlla cosa $resultcontiene prima che venga chiamata l'istruzione return e return della stringa
  • avere informazioni circa la componente che sta causando un problema chiamando $component->getName(), $component->getComponentName()e $component->getData()per aiutarvi a scoprire che cosa è il problema

2

Questo errore fatale si è verificato anche a me quando ho aggiunto un elenco / griglia personalizzati. Ho risolto questo problema modificando il costruttore e iniziando la raccolta corretta per il mio elenco di dati / griglia nel costruttore del fornitore di dati. Esempio di griglia personalizzata 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();
    }
}

Ma devi creare \ Acme \ CustomModule \ Model \ ResourceModel \ Entity \ Listing \ Collection per ottenere i suoi dati nel fornitore di dati


1

SE hai migrato da M1 a M2, allora stai riscontrando qualcosa sotto l'errore durante l'esecuzione di cmd Il negozio richiesto non è stato trovato. Verifica il negozio e riprova.

si prega di non modificare i file dell'archivio dei moduli del fornitore :

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

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

basta semplicemente applicare sotto i passaggi:

Di recente mi sono imbattuto in questa stessa situazione dopo la migrazione da Magento 1.9.3.8 a 2.3.0 e spero che la mia risposta possa essere di aiuto. Il problema è venuto dall'eliminazione di più negozi 96 di loro per essere esatti. Ho provato tutte le altre risposte qui, ma continuavo a ricevere lo stesso errore.

La correzione per me era rimuovere i vecchi dati del negozio dall'interno di "core_config_data" . Il problema è che quando Magento sta caricando i dati di configurazione del runtime sta trovando i vecchi negozi e sta cercando di risolverli. Prima di pulire i dati dal database consiglio vivamente di eseguire la query SELECT qui sotto per assicurarsi di eliminare gli archivi corretti.

SELEZIONA * FROM core_config_data WHERE scope = 'stores';

ATTENZIONE: ASSICURARSI DI ESEGUIRE IL BACKUP DEL DATABASE PRIMA DI ESEGUIRE QUESTO!

ELIMINA DA core_config_data DOVE scope_id! = 1 AND scope = 'stores';

Ora esegui tutti i comandi di Magento, puoi vedere "Il negozio richiesto non è stato trovato. Verifica il negozio e riprova" risolto dalla query

Errore irreversibile: Metodo Magento \ Ui \ TemplateEngine \ Xhtml \ Risultato :: __ toString () non deve generare un'eccezione in C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php on line 0

Ora controlla il tuo amministratore sopra l'errore fatale anche risolto blahhh ... blahh ...

(Nota: - fatal error_Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () dipendente dal modulo store quindi non cambiare / vendor / module-store altrimenti la griglia lato amministratore / list list non puoi vedere i dati corretti)


0

Dopo innumerevoli ore e molti colpi alla testa contro la scrivania, ho scoperto che stavo ottenendo questo errore, perché stavo usando xdebug (che è incredibile!) Per il breakpoint a una funzione di basso livello, vale Magento\Ui\TemplateEngine\Xhtml\Result::__toString()a dire al fine di testare.

Apparentemente in qualche modo, l'output del debugger stava effettivamente lanciando un errore che mi ha fatto urlare il metodo __toString.

Stavo impazzendo perché l'errore si sarebbe manifestato solo quando avessi attivato il debugger e pensavo che forse avesse a che fare con la chiamata AJAX nel popolare l'elenco UI. Spegnerlo sembrava farlo funzionare, quindi vale la pena provarlo. Non sono troppo sicuro di come funzioni la funzionalità breakpoint di xdebug (in particolare nei prodotti IntelliJ ... possibilmente), oltre a essere in grado di invocare un breakpoint con la linea xdebug_break(). È molto probabile che avere un punto di interruzione nel metodo __toString sia solo una cosa sciocca da fare in ogni caso.

Immagino che non possiamo ancora eseguire il debug di tutto dinamicamente ... Un giorno!

Spero davvero che questo aiuti qualcun altro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.