Devido à alta dependência de arquivos XML, estou tendo dificuldades para descobrir a causa desse erro ao criar uma grade de administração personalizada:
Erro fatal: O método Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () não deve lançar uma exceção em C: \ wamp64 \ www \ mage2 \ vendor \ magento \ module-ui \ Component \ Wrapper \ UiComponent.php on-line 0 0
Estou tentando criar uma grade de administração para a sales_shipment_item
tabela.
Até agora eu tenho:
Utilizou o xdebug e o colocou dentro do
__toString()
método da classe Result, ele não mostra qual é o erro realEu tenho
var_dump
-ed as variáveis dentro do__toString()
métodoEu tenho o modo de desenvolvedor ativado no Magento 2
Eu verifiquei o
var/logs
e não mostra nada útil
Fiz com sucesso outras grades personalizadas de administrador, mas tentar descobrir o erro real é como uma agulha no palheiro. Alguém encontrou uma maneira melhor de depurar estes? Eu olhei sobre todo o grid xml,, di.xml
e models e tudo parece ok.
Magento\Ui\TemplateEngine\Xhtml\Result::__toString()
, capture a exceção e registre-a ou imprima-a. É o que M2 deveria ter feito de qualquer maneira.} catch (\Exception $e) { $this->logger->critical($e->getMessage()); $result = $e->getMessage(); }
o erro é o que eu já postei. Quando eu tive esses erros antes, geralmente tem a ver com as injeções de di.xml ausentes, mas é impossível depurar sem adivinhar, e foi por isso que postei essa pergunta.Respostas:
O erro que você está recebendo é realmente acionado
vendor\magento\module-ui\Component\Wrapper\UiComponent.php
.No entanto, não é acionado na linha 0, mas quando o resultado está sendo convertido em uma sequência no seguinte método na instrução de retorno :
Aqui está o que você pode tentar depurar seu problema:
$result
contém antes que a instrução de conversão e retorno de string seja chamada$component->getName()
,$component->getComponentName()
e$component->getData()
para ajudá-lo descobrir qual é o problemafonte
Este erro fatal também ocorreu quando adicionei grade / listagem personalizada. Corrigi esse problema alterando o construtor e iniciando a coleta correta para minha listagem / grade de dados no construtor do provedor de dados. Exemplo de grade personalizada DataProvider.php
Mas você precisa criar \ Acme \ CustomModule \ Model \ ResourceModel \ Entity \ Listing \ Collection para obter seus dados no provedor de dados
fonte
SE você migrou M1 para M2, está enfrentando algo abaixo do erro durante a execução do cmd O armazenamento solicitado não foi encontrado. Verifique a loja e tente novamente.
não altere os arquivos de armazenamento de módulos do fornecedor :
basta aplicar as etapas abaixo:
Recentemente, me deparei com essa mesma situação depois de migrar do Magento 1.9.3.8 para 2.3.0 e espero que minha resposta possa ser útil. O problema veio da exclusão de várias lojas, 96 delas para ser exato. Tentei todas as outras respostas aqui, mas ainda estava recebendo o mesmo erro.
A correção para mim foi remover os dados antigos da loja de dentro do "core_config_data" . O problema é que, quando o Magento está carregando os dados de configuração do tempo de execução, ele encontra as lojas antigas e tenta resolvê-las. Antes de limpar os dados do banco de dados, recomendo que você execute a consulta SELECT abaixo para certificar-se de excluir os armazenamentos corretos.
AVISO: CERTIFIQUE-SE DE CÓPIA DE BACKUP DA SUA BASE DE DADOS ANTES DE EXECUTAR ISTO!
Agora execute todos os comandos magento e veja a "A loja solicitada não foi encontrada. Verifique a loja e tente novamente" corrigida pela consulta
Agora verifique o seu administrador acima de erro fatal também resolvido blahhh ... blahh ...
(Nota: - erro fatal_Magento \ Ui \ TemplateEngine \ Xhtml \ Result :: __ toString () depende do módulo da loja, portanto não mude / vendor / module-store, caso contrário, a grade do lado do administrador / catálogo de listas não poderá ver os dados adequados)
fonte
Após inúmeras horas e muitas batidas com a cabeça na mesa, descobri que estava recebendo esse erro, porque estava usando o xdebug (o que é incrível!) Para interromper uma função de baixo nível, ou seja
Magento\Ui\TemplateEngine\Xhtml\Result::__toString()
, para testar.Aparentemente, de alguma maneira, a saída do depurador estava lançando um erro que fazia com que o método __toString gritasse comigo.
Eu estava ficando louco porque o erro só apareceria quando o depurador estivesse ligado e pensei que talvez tivesse algo a ver com a chamada AJAX ao preencher a listagem da interface do usuário. Desligá-lo parecia fazê-lo funcionar, por isso vale a pena tentar. Não tenho muita certeza de como a funcionalidade de ponto de interrupção do xdebug (especificamente nos produtos IntelliJ ... possivelmente) funciona, exceto se você puder invocar um ponto de interrupção com a linha
xdebug_break()
. É muito provável que ter um ponto de interrupção no método __toString seja apenas uma coisa boba de se fazer em qualquer caso.Acho que ainda não podemos depurar tudo dinamicamente ... Um dia!
Eu realmente espero que isso ajude outra pessoa.
fonte