Из-за высокой степени надежности файлов XML мне очень трудно выяснить причину этой ошибки при создании пользовательской сетки администратора:
Неустранимая ошибка: метод Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () не должен вызывать исключение в C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php в строке 0
Я пытаюсь сделать сетку администратора для sales_shipment_item
таблицы.
Пока что у меня есть:
Использовал xdebug и поместил его в
__toString()
метод класса Result, он не показывает реальную ошибкуЯ
var_dump
-переменные в__toString()
методеУ меня в Magento 2 включен режим разработчика
Я проверил
var/logs
и ничего полезного не показывает
Я успешно создал другие пользовательские сетки для администраторов, но попытка выяснить фактическую ошибку подобна иголке в стоге сена. Кто-нибудь нашел лучший способ отладки этих? Я просмотрел всю сетку XML di.xml
, и модели, и все выглядит хорошо.
Magento\Ui\TemplateEngine\Xhtml\Result::__toString()
, поймайте исключение и зарегистрируйте его или распечатайте. Это то, что М2 должен был сделать в любом случае.} catch (\Exception $e) { $this->logger->critical($e->getMessage()); $result = $e->getMessage(); }
ошибка, что я уже опубликовал. Когда у меня были эти ошибки раньше, это обычно связано с отсутствующими инъекциями di.xml, но их невозможно отладить, не угадав, поэтому я и опубликовал этот вопрос.Ответы:
Ошибка, которую вы получаете, действительно вызвана
vendor\magento\module-ui\Component\Wrapper\UiComponent.php
.Однако он запускается не в строке 0, а при преобразовании результата в строку в следующем методе в операторе возврата :
Вот что вы можете попробовать отладить вашу проблему:
$result
содержится до вызова преобразования строки и оператора возврата$component->getName()
,$component->getComponentName()
и$component->getData()
чтобы помочь вам выяснить, в чем проблемаисточник
Эта фатальная ошибка также произошла со мной, когда я добавил пользовательский листинг / сетку. Я исправил эту проблему, изменив конструктор и инициировав правильный сбор данных для моего списка / сетки данных в конструкторе поставщика данных. Пример пользовательской сетки DataProvider.php
Но вам нужно создать \ Acme \ CustomModule \ Model \ ResourceModel \ Entity \ Listing \ Collection, чтобы получить данные в поставщике данных
источник
Если вы перенесли M1 в M2, то вы столкнулись с ошибкой ниже во время выполнения cmd Запрошенное хранилище не найдено. Проверьте магазин и попробуйте снова.
пожалуйста, не изменяйте в файлах магазина модуля продавца :
просто примените следующие шаги:
Я только недавно столкнулся с такой же ситуацией после перехода с Magento 1.9.3.8 на 2.3.0 и надеюсь, что мой ответ может быть полезным. Проблема возникла из-за удаления нескольких магазинов, 96 из которых были точными. Я попробовал все остальные ответы здесь, но все еще получал ту же ошибку.
Для меня исправлением было удаление старых данных магазина изнутри «core_config_data» . Проблема в том, что когда Magento загружает данные конфигурации во время выполнения, он находит старые хранилища и пытается их разрешить. Перед очисткой данных из базы данных я НАСТОЯТЕЛЬНО рекомендую вам выполнить запрос SELECT ниже, чтобы убедиться, что вы удаляете правильные хранилища.
ВНИМАНИЕ: УБЕДИТЕСЬ, ЧТОБЫ СОЗДАТЬ ВАШУ БАЗУ ДАННЫХ ПЕРЕД ПРОВЕДЕНИЕМ ЭТОГО
Теперь выполните все команды magento, которые вы видите. «Запрошенное хранилище не найдено. Проверьте хранилище и попробуйте снова», исправленное запросом
Теперь проверьте ваш админ над фатальной ошибкой, также решенной бла ...
(Примечание: - фатальная ошибка_Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () зависит от модуля хранилища, поэтому не изменяйте / vendor / module-store, иначе сетка / список на стороне администратора вы не сможете увидеть правильные данные)
источник
После бесчисленных часов и множества ударов головой о стол я обнаружил, что получаю эту ошибку, потому что я использовал xdebug (что удивительно!) Для точки останова на низкоуровневой функции, а именно
Magento\Ui\TemplateEngine\Xhtml\Result::__toString()
для тестирования.По-видимому, каким-то образом вывод отладчика фактически выдавал ошибку, из-за которой метод __toString выкрикивал на меня.
Я сходил с ума, потому что ошибка появлялась только тогда, когда я включал отладчик и думал, что, возможно, это как-то связано с вызовом AJAX при заполнении списка пользовательского интерфейса. Отключение, казалось, заставило это работать, так что стоит попробовать. Я не слишком уверен, как функционирует точка останова в xdebug (особенно в продуктах IntelliJ ... возможно), за исключением того, что вы можете вызывать точку останова со строкой
xdebug_break()
. Весьма вероятно, что в любом случае иметь точку останова в методе __toString просто глупо.Думаю, мы пока не можем все отладить динамически ... Однажды!
Я действительно надеюсь, что это поможет кому-то еще.
источник