Magento 2が管理グリッドエラーをトレースできません:致命的なエラー:メソッドMagento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString()は例外をスローしてはなりません


9

XMLファイルへの依存度が高いため、カスタム管理グリッドを作成するときに、このエラーの原因を解明するのに非常に苦労しています。

致命的なエラー:メソッドMagento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString()は、C:\ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.phpで例外をスローしてはいけません0

sales_shipment_itemテーブルの管理グリッドを作成しようとしています。

これまでのところ:

  1. xdebugを使用し__toString()てResultクラスのメソッド内に配置すると、実際のエラーが何であるかは表示されません

  2. メソッドvar_dump内の変数を編集しました__toString()

  3. Magento 2で開発者モードをオンにしている

  4. 私はチェックしましたがvar/logs、役に立たないことを示しています

他の管理者用カスタムグリッドの作成に成功しましたが、実際のエラーを理解しようとすることは、干し草の山の針のようなものです。誰かがこれらをデバッグするより良い方法を見つけましたか?すべてのグリッドxml 、、di.xmlおよびモデルを調べましたが、すべて問題ありません。


で大きなtry / catchブロックを作成しMagento\Ui\TemplateEngine\Xhtml\Result::__toString()、例外をキャッチしてログに記録するか、出力します。とにかく、M2がやるべきことです。
nevvermind 2016年

はい、それはResult.php:にすでにあるものです} catch (\Exception $e) { $this->logger->critical($e->getMessage()); $result = $e->getMessage(); }。エラーはすでに投稿したものです。通常、di.xmlインジェクションの欠落に関連する前にこれらのエラーが発生したが、これらを推測することなくデバッグすることはできないため、この質問を投稿しました。
ケビンチャベス

@KevinJavitz、これを修正しましたか?私も同じ問題を抱えています。
MGento 2018

回答:


4

発生しているエラーは確かにで発生しvendor\magento\module-ui\Component\Wrapper\UiComponent.phpます。

ただし、0行目ではトリガーされず、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;
}

問題をデバッグするために試すことができるものは次のとおりです。

  • $result文字列変換とreturnステートメントが呼び出される前にが含まれているかを確認します
  • コンポーネントに関する情報を取得呼び出すことによって、問題を引き起こしている$component->getName()$component->getComponentName()$component->getData()ヘルプに、あなたは、問題が何であるかを見つけ出します

2

この致命的なエラーは、カスタムリスト/グリッドを追加したときにも発生しました。この問題を修正するには、コンストラクターを変更し、データプロバイダーコンストラクターでデータリスト/グリッドの正しいコレクションを開始します。カスタムグリッドのDataProvider.phpの例

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

ただし、データプロバイダーでデータを取得するには、\ Acme \ CustomModule \ Model \ ResourceModel \ Entity \ Listing \ Collectionを作成する必要があります


1

M1をM2に移行した場合、cmdの実行中に以下のエラーが発生します 。要求されたストアが見つかりませんでした。ストアを確認して、再試行してください。

ベンダーの モジュールストア ファイルを変更しないでください

  • /vendor/magento/module-store/Model/StoreManager.phpまたは

    /vendor/magento/module-store/Model/StoreRepository.php

以下の手順を適用するだけです。

Magento 1.9.3.8から2.3.0に移行した後、最近同じ状況に遭遇しました。私の回答が役に立てば幸いです。問題は、正確に言うと複数のストアを削除することから生じました。ここで他のすべての答えを試しましたが、それでも同じエラーが発生していました。

私の修正は、「core_config_data」の内部から古いストアデータを削除することでした。問題は、Magentoがランタイム構成データをロードしているときに、古いストアを見つけてそれらを解決しようとしていることです。データベースからデータを削除する前に、以下のSELECTクエリを実行して、正しいストアを削除することを強くお勧めします。

SELECT * FROM core_config_data WHERE scope = 'stores';

警告:これを実行する前に、必ずデータベースをバックアップしてください。

DELETE FROM core_config_data WHERE scope_id!= 1 AND scope = 'stores';

クエリで修正された「リクエストされたストアが見つかりませんでした。ストアを確認してもう一度お試しください」が表示されるすべてのmagentoコマンドを実行します。

致命的なエラー:メソッドMagento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString()は、C:\ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.phpで例外をスローしてはいけません0

致命的なエラーの上の管理者をチェックして、何とか解決されました...何とか...

(注:-致命的なerror_Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString()はストアモジュールに依存するため、/ vendor / module-storeを変更しないでください。変更しないと、管理側のグリッド/リストのカタログに適切なデータが表示されません)


0

数え切れないほどの時間とたくさんの頭を机にぶつけた後、xdebug(驚くべきことです!)を使用して低レベルの関数でブレークポイントにブレークポイントを設定していたため、このエラーが発生していることがわかりましたMagento\Ui\TemplateEngine\Xhtml\Result::__toString()

どういうわけか、デバッガからの出力は実際にはエラーをスローしていて、__toStringメソッドが私に怒鳴りました。

エラーが表示されるのはデバッガーをオンにしていて、UIリストにデータを入力する際のAJAX呼び出しに関係しているのではないかと思ったからです。オフにすると機能するようだったので、試してみる価値はあります。xdebugのブレークポイント機能(IntelliJ製品では特に...)がどのように機能するかは、行でブレークポイントを呼び出すことができることを除いて、あまりわかりませんxdebug_break()。__toStringメソッドにブレークポイントを設定することは、とにかくばかげたことです。

まだすべてを動的にデバッグすることはできないと思います...ある日!

これが誰かを助けることを本当に望みます。

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