Magento 2 Không thể theo dõi Lỗi lưới quản trị: Lỗi nghiêm trọng: Phương pháp Magento \ Ui \ TemplateEngine \ Xhtml \ result :: __ toString () không được ném ngoại lệ


9

Do tính phụ thuộc cao của các tệp XML, tôi gặp rất nhiều khó khăn để tìm ra nguyên nhân của lỗi này khi tạo lưới quản trị viên tùy chỉnh:

Lỗi nghiêm trọng: Phương thức Magento \ Ui \ TemplateEngine \ Xhtml \ result :: __ toString () không được ném ngoại lệ trong C: \ wamp64 \ www \ mage2 \ eller \ magento \ module-ui \ Element \ Wrapper \ UiComponent.php trên dòng 0

Tôi đang cố gắng tạo một lưới quản trị cho sales_shipment_itembảng.

Cho đến nay tôi có:

  1. Đã sử dụng xdebug và đặt nó trong __toString()phương thức của lớp Kết quả, nó không hiển thị lỗi thực sự là gì

  2. Tôi đã var_dump-ed các biến trong __toString()phương thức

  3. Tôi đã bật chế độ nhà phát triển trong Magento 2

  4. Tôi đã kiểm tra var/logsvà nó cho thấy không có gì hữu ích

Tôi đã thực hiện thành công các lưới tùy chỉnh quản trị viên khác, nhưng cố gắng tìm ra lỗi thực tế giống như một cây kim trong đống cỏ khô. Có ai tìm thấy một cách tốt hơn để gỡ lỗi những? Tôi đã xem qua tất cả các lưới xml di.xml, và các mô hình và tất cả đều ổn.


Tạo một khối thử / bắt lớn Magento\Ui\TemplateEngine\Xhtml\Result::__toString(), bắt ngoại lệ và ghi nhật ký hoặc in. Đó là những gì M2 nên làm.
nevvermind

vâng, đó là những gì đã có trong result.php : } catch (\Exception $e) { $this->logger->critical($e->getMessage()); $result = $e->getMessage(); }, lỗi là những gì tôi đã đăng. Khi tôi gặp phải những lỗi này trước đây, nó thường liên quan đến việc tiêm di.xml bị thiếu nhưng chúng không thể gỡ lỗi mà không cần đoán, đó là lý do tại sao tôi đăng câu hỏi này.
Kevin Chavez

@KevinJavitz, bạn đã sửa cái này chưa? Tôi đang có cùng một vấn đề.
MGento

Câu trả lời:


4

Lỗi bạn nhận được thực sự được kích hoạt vendor\magento\module-ui\Component\Wrapper\UiComponent.php.

Tuy nhiên, nó không được kích hoạt ở dòng 0 mà là khi kết quả đang được chuyển đổi thành một chuỗi trong phương thức sau trong câu lệnh return :

protected function _toHtml()
{
    foreach ($this->getChildNames() as $childName) {
        $childBlock = $this->getLayout()->getBlock($childName);
        if ($childBlock) {
            $wrapper = $this->blockWrapperFactory->create([
                'block' => $childBlock,
                'data' => [
                    'name' => 'block_' . $childName
                ]
            ]);
            $this->component->addComponent('block_' . $childName, $wrapper);
        }
    }

    $result = $this->component->render();
    return (string)$result;
}

Đây là những gì bạn có thể cố gắng để gỡ lỗi vấn đề của bạn:

  • kiểm tra những gì $resultchứa trước khi câu lệnh chuyển đổi và trả về chuỗi được gọi
  • nhận được thông tin về các thành phần đó gây ra một vấn đề bằng cách gọi $component->getName(), $component->getComponentName()$component->getData()để giúp bạn tìm ra vấn đề là gì

2

Lỗi nghiêm trọng này cũng xảy ra với tôi khi tôi thêm danh sách / lưới tùy chỉnh. Tôi đã khắc phục vấn đề này bằng cách thay đổi hàm tạo và khởi tạo bộ sưu tập chính xác cho danh sách / lưới dữ liệu của tôi trong hàm tạo của nhà cung cấp dữ liệu. Ví dụ về DataProvider.php tùy chỉnh lưới

use Acme\CustomModule\Model\ResourceModel\Entity\Listing\CollectionFactory;

class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
{
    public function __construct(
        $name,
        $primaryFieldName,
        $requestFieldName,
        CollectionFactory $collectionFactory,
        array $meta = [],
        array $data = []
    ) {
        parent::__construct($name, $primaryFieldName, $requestFieldName, 
        $meta, $data);
        $this->collection = $collectionFactory->create();
    }

    public function getData(): array
    {
        $collection = $this->getCollection();
        return $collection->toArray();
    }
}

Nhưng bạn cần tạo \ Acme \ CustomModule \ Model \ ResourceModel \ Entity \ List \ Collection để lấy dữ liệu của nó trong nhà cung cấp dữ liệu


1

NẾU Bạn đã di chuyển M1 sang M2 thì bạn sẽ gặp phải lỗi nào đó trong quá trình thực thi cmd Cửa hàng được yêu cầu không được tìm thấy. Xác nhận cửa hàng và thử lại.

xin vui lòng không thay đổi trong các tập tin lưu trữ mô-đun nhà cung cấp :

  • /vendor/magento/module-store/Model/StoreManager.php hoặc

    /vendor/magento/module-store/Model/StoreRep repository.php

chỉ cần áp dụng các bước dưới đây:

Gần đây tôi đã gặp tình huống tương tự sau khi chuyển từ Magento 1.9.3.8 sang 2.3.0 và hy vọng câu trả lời của tôi có thể giúp ích. Vấn đề đến từ việc xóa nhiều cửa hàng 96 trong số đó là chính xác. Tôi đã thử tất cả các câu trả lời khác ở đây nhưng vẫn nhận được cùng một lỗi.

Cách khắc phục đối với tôi là xóa dữ liệu lưu trữ cũ từ bên trong "core_config_data" . Vấn đề là khi Magento đang tải dữ liệu cấu hình thời gian chạy, nó đang tìm các cửa hàng cũ và cố gắng giải quyết chúng. Trước khi làm sạch dữ liệu từ cơ sở dữ liệu, tôi cực kỳ khuyên bạn nên chạy truy vấn CHỌN bên dưới để đảm bảo bạn xóa các cửa hàng chính xác.

CHỌN * TỪ core_config_data WHERE scope = 'store';

CẢNH BÁO: HÃY ĐẢM BẢO TRỞ LẠI CƠ SỞ DỮ LIỆU CỦA BẠN TRƯỚC KHI CHẠY NÀY!

XÓA TỪ core_config_data WHERE scope_id! = 1 AND scope = 'store';

Bây giờ thực thi tất cả các lệnh magento bạn có thể thấy "Cửa hàng được yêu cầu không tìm thấy. Xác minh cửa hàng và thử lại" được sửa bởi truy vấn

Lỗi nghiêm trọng: Phương thức Magento \ Ui \ TemplateEngine \ Xhtml \ result :: __ toString () không được ném ngoại lệ trong C: \ wamp64 \ www \ mage2 \ eller \ magento \ module-ui \ Element \ Wrapper \ UiComponent.php trên dòng 0

Bây giờ hãy kiểm tra quản trị viên của bạn ở trên lỗi nghiêm trọng cũng đã giải quyết blahhh ... blahh ...

(Lưu ý: - lỗi nghiêm trọng .agagag \


0

Sau vô số giờ và rất nhiều tiếng đập đầu vào bàn làm việc, tôi phát hiện ra rằng tôi đã gặp phải lỗi này, bởi vì tôi đang sử dụng xdebug (thật đáng kinh ngạc!) Để dừng ở một chức năng cấp thấp, cụ thể là Magento\Ui\TemplateEngine\Xhtml\Result::__toString()để kiểm tra.

Rõ ràng theo một cách nào đó, đầu ra từ trình gỡ lỗi thực sự đã gây ra lỗi khiến phương thức __toString hét lên với tôi.

Tôi phát điên vì lỗi sẽ chỉ hiển thị khi tôi bật trình gỡ lỗi và nghĩ rằng có lẽ nó có liên quan đến lệnh gọi AJAX trong việc điền Danh sách giao diện người dùng. Tắt nó dường như làm cho nó hoạt động, vì vậy nó đáng để cho nó một shot. Tôi không chắc chắn chức năng điểm dừng của xdebug (cụ thể trong các sản phẩm của IntelliJ ... có thể) hoạt động như thế nào, ngoài việc bạn có thể gọi một điểm dừng với dòng xdebug_break(). Rất có khả năng có một điểm dừng trong phương thức __toString chỉ là một việc ngớ ngẩn trong mọi trường hợp.

Đoán rằng chúng ta không thể gỡ lỗi mọi thứ một cách linh hoạt ... Một ngày!

Tôi thực sự hy vọng điều này sẽ giúp người khác.

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.