Magento 2.2.0 Ungültiges Dokumentelement 'resource': Das Attribut 'title' ist erforderlich, fehlt jedoch

12

Ich versuche, eine Website von Magento 2.1.8 auf 2.2.0 zu aktualisieren

Ich habe Composer für 2.2.0 konfiguriert und es auch mit Befehlszeile aktualisiert.

Jetzt, wenn ich es magento setup:upgradestoppe, laufe ich Schema und zeige folgenden Hinweis: pfa für weitere Informationen.

Schema wird wiederholt ausgeführt ... Ungültiges Dokumentelement 'resource': Das Attribut 'title' ist erforderlich, fehlt jedoch. Zeile: 12

Element 'resource': Das Attribut 'title' ist erforderlich, fehlt jedoch. Linie: 13

Bildbeschreibung hier eingeben

Yogesh Trivedi
quelle
Überprüfen Sie den Link, rakeshjesadiya.com/…
Rakesh Jesadiya

Antworten:

21

Ich vermute, dass Sie <resource>in jeder etc/acl.xmlDatei ein -Tag mit einem fehlenden title-Attribut haben. Normalerweise führt dies dazu, dass Sie keine neue Rolle erstellen oder bearbeiten können. Ich vermute, dass sie in 2.2 einen zusätzlichen Check erstellt haben, um dies früher zu erkennen.

Überprüfen acl.xmlSie besser die -Dateien Ihrer eigenen benutzerdefinierten Erweiterungen und / oder der Erweiterungen von Drittanbietern. Bitte beachten Sie: Das title-Attribut wird nur für neue <resource>-Knoten benötigt. Wenn Sie also einem vorhandenen Ressourcenknoten (der von einem anderen Modul bereitgestellt wird) einen neuen Ressourcenknoten hinzufügen, titlemüssen Sie diesen kein -attribut hinzufügen . Beispielsweise:

<!-- 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
quelle
4
Dies kann manchmal vorkommen, wenn Sie ein Modul verwenden, das von einem anderen übergeordneten Modul abhängt, z. B. einem Megaplaza-Kern, und das übergeordnete Modul nicht installiert ist
open-ecommerce.org
1
Ich habe auch das gleiche Problem, aber leider konnte ich die Datei etc / acl.xml mit fehlendem title-Attribut nicht finden. Ich habe alle benutzerdefinierten Erweiterungen überprüft. Gibt es eine Möglichkeit, wie ich die Datei leicht erkennen kann?
Hari Swaminathan
Irgendwelche Ideen, wie man den Dateinamen der beschädigten XML ausgibt?
David Lambauer
Die Installation des Mageplaza-Kerns hat dieses Problem für mich
behoben
26

Um die Datei mit dem fehlenden Attribut zu finden, können Sie die folgende Datei ändern

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

Füge folgenden Code hinzu

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

zur Methode

protected function _readFiles($fileList)

so sollte es aussehen

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

Jetzt können Sie einen Speicherauszug des falschen XML-Elements sehen.

Dmitri Portenko
quelle
2
Ah, perfekt, Ihre Lösung hat mir
jede
1
Perfekt, Sie haben mir Zeit gespart :) Eines der Module von Drittanbietern hat auf eine Ressource verwiesen, die nicht definiert wurde.
Nidheesh
1
Sie sind ein wahrer Held
Pablo
8

Ich hatte vor kurzem das gleiche Problem. Ein paar Beobachtungen und ein Workaround.

1) Es wäre immens hilfreich, wenn anstelle von "Ungültiges Dokument" angegeben würde, welches Dokument ungültig ist.

2) Der Setup: Upgrade-Prozess sollte wahrscheinlich einige Überprüfungen vor dem Flug durchführen, um sicherzustellen, dass das Upgrade durchgeführt werden kann.

Wie auch immer, wenn Sie nicht mehr versuchen, einen fehlenden Titel in den Dutzenden von acl.xml-Dateien zu finden, aber schnell wieder online gehen müssen, müssen Sie das title-Attribut optional anstatt erforderlich machen.

Bearbeiten Sie den Anbieter / magento / framework / Acl / etc / acl_merged.xsd

Finde die Linie

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

ersetzen mit

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

Führen Sie das Magento-Setup erneut aus: Upgrade

Sie müssen das Plugin mit dem fehlenden Titel noch irgendwann finden.

Shaun Murray
quelle
0

Ich habe das "Adminhtml" in "Backend" im folgenden Code geändert, dann funktioniert es.

Ressourcentag Vor der Änderung:

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

Ressourcentag nach Änderung:

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

Endgültiger Code wie unten.

**

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