Magento 2.2.0 Geçersiz Belge Öğesi 'kaynak': 'Başlık' özelliği gerekli, ancak eksik


12

Bir web sitesini Magento 2.1.8'den 2.2.0'a yükseltmeye çalışıyorum

Ben var 2.2.0 için besteci yapılandırılmış ve ayrıca komut satırı ile güncellendi.

Şimdi magento setup:upgradeşemasını çalıştıran ve aşağıdaki notu gösteren durduğunu çalıştırdığımda: daha fazla bilgi için pfa.

Şema yineleniyor ... Geçersiz Belge Öğesi 'kaynak': 'Başlık' özelliği gerekli, ancak eksik. Satır: 12

'Resource' öğesi: 'title' özelliği gerekli, ancak eksik. Satır: 13

resim açıklamasını buraya girin


Bağlantıyı kontrol et, rakeshjesadiya.com/…
Rakesh Jesadiya

Yanıtlar:


22

En iyi tahminim, eksik <resource>bir etc/acl.xmlöznitelik içeren herhangi bir dosyada bir -tag'e sahip olmanızdır title. Genellikle bu, yeni bir rol oluşturamadığınız veya düzenleyemediğiniz sorunu atar. Bunu daha önce tespit etmek için 2.2'de ekstra bir kontrol oluşturduklarını tahmin ediyorum.

Daha iyi kontrol acl.xmlkendi özel uzantıları ve / veya 3. parti uzantıları olanların -dosyalar. Lütfen dikkat: -attribute titleyalnızca yeni- <resource>düğümler için gereklidir . Dolayısıyla, varolan bir kaynak düğüme yeni bir kaynak düğümü eklerseniz (başka bir modül tarafından sağlanır) bunlara title-attribute eklemenize gerek yoktur . Örneğin:

<!-- 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>

4
Bazı durumlarda bu, megaplaza çekirdeği gibi başka bir üst modül türüne bağlı olan bir modül kullandığınızda olabilir ve üst modül takılı değil
open-ecommerce.org 19:17

1
Ben de aynı sorunu yaşıyorum, ama ne yazık ki eksik başlık özniteliği ile vb / acl.xml dosyasını bulamadı, ben tüm özel uzantıları kontrol ettim. Kolayca dosyayı tespit edebilirsiniz bir yolu var mı.
Hari Swaminathan

Bozuk xml dosya adı çıktı hakkında herhangi bir fikir?
David Lambauer

Mageplaza çekirdeğini kurmak benim için bu sorunu çözdü: github.com/mageplaza/module-core
seanbreeden

30

Özniteliği eksik olan dosyayı bulmak için aşağıdaki dosyayı değiştirebilirsiniz

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

aşağıdaki kodu ekle

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

yönteme

protected function _readFiles($fileList)

yani böyle görünmeli

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

Artık yanlış XML öğesinin bir dökümünü görebileceksiniz.


2
Ah mükemmel, çözümünüz bana tonlarca zaman kazandırdı .. mağazamızda çok sayıda üçüncü taraf uzantı kullanıyoruz :)
Xaiamedia

1
Mükemmel, zamanımı kurtardın :) 3. taraf modüllerden biri, tanımlı olmayan bir kaynağa başvuruyordu.
Nidheesh

1
Sen gerçek bir kahramansın
Pablo

8

Son zamanlarda aynı problemi yaşadım. Birkaç gözlem ve bir çözüm.

1) 'Geçersiz Belge' yerine hangi belgenin geçersiz olduğunu söylerse çok yardımcı olacaktır .

2) Kurulum: yükseltme işlemi, yükseltme işlemini yapabildiğinden emin olmak için muhtemelen uçuş öncesi kontroller yapmalıdır.

Her neyse, düzinelerce acl.xml dosyasında eksik bir başlık bulmaya çalışıyorsanız, ancak bir siteyi tekrar çevrimiçi hale getirmeniz gerekiyorsa, hızlı çözüm başlık özniteliğini gerekli yerine isteğe bağlı hale getirmektir.

Sağlayıcı / macenta / framework / Acl / etc / acl_merged.xsd

Hattı bulun

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

şununla değiştir

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

magento kurulumunu yeniden çalıştır: yükseltme

Bir noktada eksik başlık içeren eklentiyi bulmanız gerekecek.


0

Aşağıdaki kodda "Adminhtml" "Arka uç" olarak değiştirdim sonra çalışır.

Kaynak etiketi Değişiklikten önce:

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

Kaynak etiketi Değişiklikten sonra:

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

Aşağıdaki gibi nihai kod.

**

<?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>

**


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.