Magento 2.2.0 Phần tử tài liệu không hợp lệ 'resource': Thuộc tính 'title' là bắt buộc nhưng thiếu


12

Tôi đang cố gắng nâng cấp trang web từ Magento 2.1.8 lên 2.2.0

Tôi đã cấu hình trình soạn thảo cho 2.2.0 và cũng cập nhật nó bằng dòng lệnh.

Bây giờ khi tôi magento setup:upgradedừng việc chạy lược đồ và hiển thị ghi chú sau: pfa để biết thêm thông tin.

Chạy lược đồ định kỳ ... Tài nguyên không hợp lệ 'tài nguyên': Thuộc tính 'title' là bắt buộc nhưng thiếu. Dòng: 12

Yếu tố 'tài nguyên': Thuộc tính 'tiêu đề' là bắt buộc nhưng thiếu. Dòng: 13

nhập mô tả hình ảnh ở đây


Kiểm tra liên kết, rakeshjesadiya.com/ Hãy
Rakesh Jesadiya

Câu trả lời:


21

Dự đoán tốt nhất của tôi là bạn có một <resource>-tag trong bất kỳ -file nào etc/acl.xmlvới một title-attribution bị thiếu . Thông thường, điều này sẽ đưa ra vấn đề mà bạn không thể tạo hoặc chỉnh sửa vai trò mới. Tôi đoán rằng họ đã tạo một kiểm tra bổ sung trong 2.2 để phát hiện điều này sớm hơn.

Kiểm tra tốt hơn các acl.xml-files của tiện ích mở rộng tùy chỉnh của riêng bạn và / hoặc các tiện ích mở rộng của bên thứ 3. Xin lưu ý: phần titleđóng góp chỉ được yêu cầu cho các mã mới <resource>. Vì vậy, nếu bạn thêm một nút tài nguyên mới vào một nút tài nguyên hiện có (được cung cấp bởi một mô-đun khác) thì không cần phải thêm title-attribution cho những cái đó. Ví dụ:

<!-- 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
đôi khi điều này có thể xảy ra khi bạn đang sử dụng một mô-đun phụ thuộc vào loại mô-đun mẹ khác như lõi megapixel, và mô-đun mẹ không được cài đặt
open

1
Tôi cũng gặp vấn đề tương tự, nhưng thật không may, tôi không thể tìm thấy tệp etc / acl.xml với thuộc tính tiêu đề bị thiếu, tôi đã kiểm tra tất cả các tiện ích mở rộng tùy chỉnh. Có một số cách tôi có thể phát hiện các tập tin dễ dàng.
Hari Swaminathan

Bất kỳ ý tưởng về cách xuất tên tệp của xml bị hỏng?
David Lambauer

Cài đặt lõi Mageplaza đã khắc phục sự cố này cho tôi: github.com/mageplaza/module-core
seanbreeden

26

Để tìm tệp có thuộc tính bị thiếu, bạn có thể sửa đổi tệp sau

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

thêm mã sau

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

theo phương pháp

protected function _readFiles($fileList)

vì vậy nó sẽ trông giống như

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

Bây giờ bạn sẽ có thể thấy một kết xuất của phần tử XML sai.


2
Thật hoàn hảo, giải pháp của bạn đã giúp tôi tiết kiệm rất nhiều thời gian .. chúng tôi đang sử dụng rất nhiều tiện ích mở rộng của bên thứ ba trong cửa hàng của chúng tôi :)
Xaiamedia

1
Hoàn hảo, bạn đã tiết kiệm thời gian của tôi :) Một trong các mô-đun của bên thứ 3 đang đề cập đến một tài nguyên không được xác định.
Nidheesh

1
Bạn là một anh hùng thực sự
Pablo

8

Tôi đã có vấn đề tương tự gần đây. Một vài quan sát và một cách giải quyết.

1) Nó sẽ giúp vô cùng nếu thay vì 'không hợp lệ tài liệu' nó nói với bạn tài liệu không hợp lệ.

2) Quá trình thiết lập: nâng cấp có thể nên thực hiện một số kiểm tra trước chuyến bay để đảm bảo nó có thể thực hiện nâng cấp.

Dù sao, nếu bạn bị mắc kẹt khi cố gắng tìm một tiêu đề bị thiếu trong hàng tá tệp acl.xml, nhưng cần nhanh chóng đưa trang web trở lại, cách khắc phục nhanh là làm cho thuộc tính tiêu đề tùy chọn thay vì bắt buộc.

Chỉnh sửa nhà cung cấp / magento / framework / Acl / etc / acl_merged.xsd

Tìm dòng

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

thay thế bằng

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

chạy lại thiết lập magento: nâng cấp

Bạn vẫn sẽ cần tìm plugin có tiêu đề bị thiếu tại một số điểm.


0

Tôi đã thay đổi "adminhtml" thành "Backend" trong mã bên dưới thì nó hoạt động.

Thẻ tài nguyên Trước khi thay đổi:

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

Thẻ tài nguyên Sau khi thay đổi:

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

Mã cuối cùng như dưới đây.

**

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

**


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.