Magento 2 Tidak Mungkin Untuk Melacak Kesalahan Grid Admin: Kesalahan fatal: Metode Magento \ Ui \ TemplateEngine \ Xhtml \ Hasil :: __ toString () tidak boleh melempar pengecualian

9

Karena tingginya ketergantungan pada file XML, saya mengalami kesulitan mencari penyebab kesalahan ini saat membuat kisi admin kustom:

Kesalahan fatal: Metode Magento \ Ui \ TemplateEngine \ Xhtml \ Hasil :: __ toString () tidak boleh melempar pengecualian dalam C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php on line 0

Saya mencoba membuat kisi admin untuk sales_shipment_itemtabel.

Sejauh ini saya punya:

  1. Digunakan xdebug dan memasukkannya ke dalam __toString()metode kelas Hasil, itu tidak menunjukkan apa kesalahan sebenarnya

  2. Saya telah var_dump-ed variabel dalam __toString()metode

  3. Mode pengembang saya aktif di Magento 2

  4. Saya telah memeriksa var/logsdan tidak ada yang membantu

Saya telah berhasil membuat kisi-kisi khusus admin lainnya, tetapi mencoba mencari tahu kesalahan sebenarnya seperti jarum di tumpukan jerami. Adakah yang menemukan cara yang lebih baik untuk men-debug ini? Saya telah melihat ke semua kotak xml di.xml,, dan model dan semua terlihat ok.

Kevin Chavez
sumber
Buat blok coba / tangkap yang besar Magento\Ui\TemplateEngine\Xhtml\Result::__toString(), tangkap pengecualian dan catat, atau cetak. Itu yang seharusnya dilakukan M2.
nevvermind
ya itulah yang sudah ada di Result.php:, } catch (\Exception $e) { $this->logger->critical($e->getMessage()); $result = $e->getMessage(); }kesalahannya adalah apa yang sudah saya posting. Ketika saya memiliki kesalahan ini sebelum biasanya ada hubungannya dengan suntikan di.xml yang hilang tetapi ini tidak mungkin untuk debug tanpa hanya menebak, itulah sebabnya saya memposting pertanyaan ini.
Kevin Chavez
@KevinJavitz, Apakah Anda memperbaiki ini? Saya mengalami masalah yang sama.
MGento

Jawaban:

4

Kesalahan yang Anda dapatkan memang dipicu vendor\magento\module-ui\Component\Wrapper\UiComponent.php.

Namun, itu tidak dipicu pada baris 0 tetapi ketika hasilnya sedang dikonversi ke string dalam metode berikut dalam pernyataan kembali :

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

Inilah yang dapat Anda coba debug masalah Anda:

  • periksa apa yang $resultberisi sebelum konversi string dan pernyataan kembali disebut
  • dapatkan informasi tentang komponen yang menyebabkan masalah dengan menelepon $component->getName(), $component->getComponentName()dan $component->getData()untuk membantu Anda mengetahui apa masalahnya
Raphael di Digital Pianism
sumber
2

Kesalahan fatal ini juga terjadi pada saya ketika saya menambahkan cantuman / kisi khusus. Saya memperbaiki masalah ini dengan mengubah konstruktor dan memulai pengumpulan yang benar untuk daftar data saya / grid di konstruktor penyedia data. Contoh kisi kustom 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();
    }
}

Tetapi Anda perlu membuat \ Acme \ CustomModule \ Model \ ResourceModel \ Entity \ Listing \ Collection untuk mendapatkan data di penyedia data

transversus
sumber
1

JIKA Anda bermigrasi M1 ke M2, maka Anda menghadapi kesalahan di bawah ini selama cmd eksekusi . Toko yang diminta tidak ditemukan. Verifikasi toko dan coba lagi.

tolong jangan mengubah file modul-toko vendor :

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

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

cukup dengan menerapkan langkah-langkah di bawah ini:

Saya baru saja menemukan situasi yang sama ini setelah bermigrasi dari Magento 1.9.3.8 ke 2.3.0 dan berharap jawaban saya dapat membantu. Masalahnya berasal dari menghapus beberapa toko, tepatnya 96 toko. Saya mencoba semua jawaban lain di sini tetapi masih mendapatkan kesalahan yang sama.

Perbaikan untuk saya adalah menghapus data toko lama dari dalam "core_config_data" . Masalahnya adalah ketika Magento memuat data konfigurasi run time, ia menemukan toko lama dan mencoba menyelesaikannya. Sebelum membersihkan data dari database saya SANGAT menyarankan Anda menjalankan kueri SELECT di bawah ini untuk memastikan Anda menghapus toko yang benar.

SELECT * FROM core_config_data WHERE scope = 'stores';

PERINGATAN: PASTIKAN UNTUK MEMBUAT DATABASE ANDA SEBELUM MENJALANKAN INI!

HAPUS DARI core_config_data WHERE scope_id! = 1 AND scope = 'store';

Sekarang jalankan semua perintah magento Anda dapat melihat "Toko yang diminta tidak ditemukan. Verifikasi toko dan coba lagi" diperbaiki dengan permintaan

Kesalahan fatal: Metode Magento \ Ui \ TemplateEngine \ Xhtml \ Hasil :: __ toString () tidak boleh melempar pengecualian dalam C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php on line 0

Sekarang periksa admin Anda di atas kesalahan fatal juga diselesaikan blahhh ... blahh ...

(Catatan: - fatal error_Magento \ Ui \ TemplateEngine \ Xhtml \ Hasil :: __ toString () bergantung pada modul toko jadi jangan ubah / vendor / modul-toko kalau tidak admin sisi kisi / daftar katalog Anda tidak bisa melihat data yang tepat)

Nikunj Panchal
sumber
0

Setelah berjam-jam dan banyak membenturkan kepala ke meja, saya menemukan bahwa saya mendapatkan kesalahan ini, karena saya menggunakan xdebug (yang luar biasa!) Untuk breakpoint pada fungsi tingkat rendah, yaitu Magento\Ui\TemplateEngine\Xhtml\Result::__toString()untuk menguji.

Rupanya dalam beberapa cara, output dari debugger sebenarnya melempar kesalahan yang menyebabkan metode __toString meneriaki saya.

Saya menjadi gila karena kesalahan hanya akan muncul sendiri ketika saya mengaktifkan debugger dan berpikir mungkin itu ada hubungannya dengan panggilan AJAX dalam mengisi Daftar UI. Mematikannya sepertinya membuatnya bekerja, jadi ada baiknya mencobanya. Saya tidak terlalu yakin bagaimana fungsionalitas breakpoint xdebug (dalam produk IntelliJ khusus ... mungkin) bekerja, selain Anda dapat menggunakan breakpoint dengan garis xdebug_break(). Sangat mungkin memiliki breakpoint dalam metode __toString adalah hal yang konyol untuk dilakukan.

Kira kita belum bisa men-debug semuanya secara dinamis ... Suatu hari!

Saya sangat berharap ini membantu orang lain.

Nathaniel Rogers
sumber