Magento 2.2.0無効なドキュメント要素「リソース」:属性「タイトル」は必須ですが、欠落しています


12

WebサイトをMagento 2.1.8から2.2.0アップグレードしようとしています

私がしている2.2.0のために作曲を設定しても、コマンドラインでそれを更新しました。

magento setup:upgradeスキーマの実行を停止し、次のメモを表示すると、詳細はpfaになります。

繰り返しスキーマを実行しています...無効なドキュメント要素 'resource':属性 'title'は必須ですが、欠落しています。ライン:12

要素「リソース」:属性「タイトル」は必須ですが、欠落しています。ライン:13

ここに画像の説明を入力してください


リンクをチェック、rakeshjesadiya.com /…
Rakesh Jesadiya

回答:


21

私の最善の推測は、<resource>-attributeがetc/acl.xml欠落している-fileに-tag があることですtitle。通常、これにより、新しいロールを作成または編集できないという問題がスローされます。私は彼らがこれをより早く検出するために2.2で追加のチェックを作成したと推測しています。

acl.xml独自のカスタム拡張機能やサードパーティの拡張機能のファイルを確認してください。注:title-attributeは、新しい<resource>-nodeにのみ必要です。そのため、(別のモジュールによって提供される)既存のリソースノードに新しいリソースノードを追加するtitle場合、それらに-attributeを追加する必要はありません。例えば:

<!-- 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
あなたはmegaplazaコアのような親モジュールの他の種類に依存モジュールを使用していて、親モジュールがインストールされていない場合、この缶が起こるいくつかの回
open-ecommerce.org

1
私も同じ問題を抱えていますが、残念ながら、タイトル属性が欠落しているetc / acl.xmlファイルを見つけることができませんでした。すべてのカスタム拡張を確認しました。ファイルを簡単に見つける方法はありますか。
ハリスワミナサン

破損したXMLのファイル名を出力する方法に関するアイデアはありますか?
デビッドランバウアー

Mageplazaコアをインストールすると、この問題は修正されました:github.com/mageplaza/module-core
seanbreeden

26

欠落している属性を持つファイルを見つけるには、次のファイルを変更できます

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

次のコードを追加

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

メソッドへ

protected function _readFiles($fileList)

のように見えるはずです

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

これで、間違ったXML要素のダンプを見ることができます。


2
完璧です。あなたのソリューションで時間を大幅に節約できました。.私たちのストアでは多くのサードパーティの拡張機能を使用しています:)
Xaiamedia

1
完璧です、あなたは私の時間を節約しました:)サードパーティのモジュールの1つは、定義されていないリソースを参照していました。
ニディーシュ

1
あなたは本当のヒーロー
パブロ

8

私は最近この同じ問題を抱えていました。いくつかの観察と回避策。

1)「無効なドキュメント」の代わりに、どのドキュメントが無効であるかを通知してくれれば、非常に役立ちます。

2)setup:upgradeプロセスは、アップグレードを実行できることを確認するために、おそらくいくつかのプリフライトチェックを実行する必要があります。

とにかく、多数のacl.xmlファイルで欠落しているタイトルを見つけようとしているが、サイトをすばやくオンラインに戻す必要がある場合、簡単な回避策はtitle属性を必須ではなくオプションにすることです。

vendor / magento / framework / Acl / etc / acl_merged.xsdを編集します

行を見つける

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

と置換する

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

magento setup:upgradeを再実行します

ある時点で、タイトルのないプラグインを見つける必要があります。


0

以下のコードで「Adminhtml」を「Backend」に変更すると、動作します。

変更前のリソースタグ:

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

変更後のリソースタグ:

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

以下の最終コード。

**

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

**


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.