Magento 2.2.0 'Sumber' Dokumen Elemen Tidak Valid: Atribut 'judul' diperlukan tetapi tidak ada

12

Saya mencoba meningkatkan situs web dari Magento 2.1.8 ke 2.2.0

Saya telah mengkonfigurasi komposer untuk 2.2.0 dan juga memperbaruinya dengan baris perintah.

Sekarang ketika saya menjalankan magento setup:upgradepenghentian menjalankan skema dan menunjukkan catatan berikut: pfa untuk info lebih lanjut.

Menjalankan skema berulang ... 'Dokumen' Elemen Dokumen Tidak Valid: Atribut 'judul' diperlukan tetapi tidak ada. Baris: 12

Elemen 'sumber daya': Atribut 'judul' diperlukan tetapi tidak ada. Baris: 13

masukkan deskripsi gambar di sini

Yogesh Trivedi
sumber
Periksa tautan, rakeshjesadiya.com/...
Rakesh Jesadiya

Jawaban:

22

Dugaan terbaik saya adalah bahwa Anda memiliki <resource>-tag di etc/acl.xml-file dengan atribut-hilang title. Biasanya ini akan menimbulkan masalah yang Anda tidak bisa membuat atau mengedit peran baru. Saya menduga mereka membuat pemeriksaan tambahan di 2.2 untuk mendeteksi ini lebih awal.

Lebih baik periksa acl.xml-file dari ekstensi kustom Anda sendiri dan / atau ekstensi pihak ke-3. Harap dicatat: title-atribut hanya diperlukan untuk <resource>-node baru . Jadi jika Anda menambahkan node sumber daya baru ke node sumber daya yang sudah ada (disediakan oleh modul lain) tidak perlu menambahkan title-atribusi ke itu. Sebagai contoh:

<!-- provided by Magento_Backend, so they already have a title: -->
<resource id="Magento_Backend::stores">
    <resource id="Magento_Backend::stores_settings">
        <!-- provided by Magento_Config: -->
        <resource id="Magento_Config::config">
            <!-- New resource! Title is required: -->
            <resource id="Vendor_Module::config_general" title="Something" translate="title"/> 
        </resource>
    </resource>
</resource>
Giel Berkers
sumber
4
beberapa kali hal ini dapat terjadi ketika Anda menggunakan modul yang bergantung pada jenis lain dari modul induk seperti inti megaplaza, dan modul induk tidak diinstal
open-ecommerce.org
1
Saya juga mengalami masalah yang sama, tetapi sayangnya saya tidak dapat menemukan file etc / acl.xml dengan atribut title yang hilang, saya telah memeriksa semua ekstensi khusus. Apakah ada cara agar saya dapat menemukan file dengan mudah.
Hari Swaminathan
Ada ide tentang cara menampilkan nama file xml rusak?
David Lambauer
Menginstal inti Mageplaza memperbaiki masalah ini untuk saya: github.com/mageplaza/module-core
seanbreeden
28

Untuk menemukan file dengan atribut yang hilang, Anda dapat memodifikasi file berikut

vendor/magento/framework/Config/Reader/Filesystem.php

tambahkan kode berikut

foreach($configMerger->getDom()->getElementsByTagName('resource') as $element ){
    if (!$element->hasAttribute('title')) {
        var_dump($configMerger->getDom()->saveXML($element));
    }
}

ke metode

protected function _readFiles($fileList)

jadi seharusnya terlihat seperti

protected function _readFiles($fileList)
{
    /** @var \Magento\Framework\Config\Dom $configMerger */
    $configMerger = null;
    foreach ($fileList as $key => $content) {
        try {
            if (!$configMerger) {
                $configMerger = $this->_createConfigMerger($this->_domDocumentClass, $content);
            } else {
                $configMerger->merge($content);
            }
        } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
            throw new \Magento\Framework\Exception\LocalizedException(
                new \Magento\Framework\Phrase("Invalid XML in file %1:\n%2", [$key, $e->getMessage()])
            );
        }
    }
    if ($this->validationState->isValidationRequired()) {
        $errors = [];
        if ($configMerger && !$configMerger->validate($this->_schemaFile, $errors)) {
            foreach($configMerger->getDom()->getElementsByTagName('resource') as $element ){
                if (!$element->hasAttribute('title')) {
                    var_dump($configMerger->getDom()->saveXML($element));
                }
            }
            $message = "Invalid Document \n";
            throw new \Magento\Framework\Exception\LocalizedException(
                new \Magento\Framework\Phrase($message . implode("\n", $errors))
            );
        }
    }

    $output = [];
    if ($configMerger) {
        $output = $this->_converter->convert($configMerger->getDom());
    }
    return $output;
}

Sekarang Anda akan dapat melihat dump dari elemen XML yang salah.

Dmitri Portenko
sumber
2
Ah sempurna, solusi Anda menghemat banyak waktu .. kami menggunakan banyak ekstensi pihak ketiga di toko kami :)
Xaiamedia
1
Sempurna, Anda menghemat waktu saya :) Salah satu modul pihak ketiga merujuk sumber yang tidak ditentukan.
Nidheesh
1
Anda adalah pahlawan sejati
Pablo
8

Saya punya masalah yang sama baru-baru ini. Beberapa pengamatan dan solusi.

1) Akan sangat membantu jika alih-alih 'Dokumen Tidak Valid' ia memberi tahu Anda dokumen mana yang tidak valid.

2) Pengaturan: proses pemutakhiran mungkin harus melakukan beberapa pemeriksaan pra-penerbangan untuk memastikannya dapat melakukan peningkatan.

Lagi pula, jika Anda buntu mencoba menemukan judul yang hilang di lusinan file acl.xml, tetapi perlu mendapatkan situs kembali online cepat, solusi cepat adalah membuat atribut judul opsional daripada diperlukan.

Edit vendor / magento / framework / Acl / etc / acl_merged.xsd

Temukan garis

<xs:attribute name="title" type="typeTitle" use="required" />

ubah dengan

<xs:attribute name="title" type="typeTitle" use="optional" />

jalankan kembali pengaturan magento: tingkatkan

Anda masih harus menemukan plugin dengan judul yang hilang di beberapa titik.

Shaun Murray
sumber
0

Saya telah mengubah "Adminhtml" menjadi "Backend" dalam kode di bawah ini kemudian berfungsi.

Tag sumber daya Sebelum perubahan:

**<resource id="Magento_Adminhtml::admin">**

Tag sumber daya Setelah perubahan:

**<resource id="Magento_Backend::admin">**

Kode akhir seperti di bawah ini.

**

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Acl/etc/acl.xsd">
    <acl>
        <resources>
            <resource id="Magento_Backend::admin">
                <resource id="Neo_Testing::testing" title="testing" sortOrder="100"/>
            </resource>
        </resources>
    </acl>
</config>

**

Jitendra Patel
sumber