Magento 2.2.0 유효하지 않은 문서 요소 '자원': 'title'속성이 필요하지만 누락되었습니다.


12

Magento 2.1.8에서 2.2.0으로 웹 사이트 를 업그레이드 하려고합니다.

나는 한 2.2.0에 대한 작곡가를 구성 하며 명령 줄로 업데이트되었습니다.

이제 magento setup:upgrade스키마 실행시 정지를 실행하고 자세한 정보는 pfa를 표시하십시오.

스키마 반복 ... 잘못된 문서 요소 '자원'실행 중 : 'title'속성이 필요하지만 누락되었습니다. 줄 : 12

'자원'요소 : '제목'속성이 필요하지만 누락되었습니다. 줄 : 13

여기에 이미지 설명을 입력하십시오


답변:


22

내 최선의 추측은 누락 된 속성이 <resource>있는 모든 파일에 etc/acl.xml- 태그 가 있다는 것 title입니다. 일반적으로 새 역할을 만들거나 편집 할 수없는 문제가 발생합니다. 나는 그들이 더 일찍 이것을 감지하기 위해 2.2에서 추가 검사를 한 것으로 추측합니다.

acl.xml사용자 정의 확장명 및 / 또는 타사 확장명을 가진 파일을 더 잘 확인하십시오 . 참고 : title-attribute는 새 <resource>노드 에만 필요합니다 . 따라서 기존 자원 노드 (다른 모듈에서 제공)에 새 자원 노드를 추가하는 경우 해당 자원에 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 파일을 찾을 수 없었습니다. 모든 사용자 정의 확장을 확인했습니다. 파일을 쉽게 찾을 수있는 방법이 있습니까?
Hari Swaminathan

손상된 XML의 파일 이름을 출력하는 방법에 대한 아이디어가 있습니까?
David Lambauer

Mageplaza 코어를 설치하면이 문제가 해결되었습니다. github.com/mageplaza/module-core
seanbreeden

29

누락 된 속성을 가진 파일을 찾으려면 다음 파일을 수정할 수 있습니다

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
완벽, 당신은 내 시간을 절약 :) 타사 모듈 중 하나는 정의되지 않은 리소스를 참조했다.
Nidheesh

1
당신은 진정한 영웅입니다
Pablo

8

나는 최근에 같은 문제가 있었다. 몇 가지 관찰과 해결 방법.

1) '잘못된 문서'대신에 어떤 문서가 유효하지 않은지 를 알려 주면 대단히 도움이 될 것 입니다.

2) 설정 : 업그레이드 프로세스는 업그레이드를 수행 할 수 있도록 비행 전 검사를 수행해야합니다.

어쨌든 수십 개의 acl.xml 파일에서 누락 된 제목을 찾으려고했지만 사이트를 온라인으로 빠르게 다시 가져와야하는 경우 빠른 해결 방법은 제목 속성을 필수 대신 선택 사항으로 만드는 것입니다.

공급 업체 / 마 젠토 / 프레임 워크 /Acl/etc/acl_merged.xsd 편집

줄 찾기

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

~로 바꾸다

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

magento 설정을 다시 실행하십시오 :

여전히 제목이 누락 된 플러그인을 찾아야합니다.


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.