Arquivo de modelo inválido - problema de atualização de 2.2.6 para 2.2.7 ou 2.3

15

Eu atualizei a versão 2.2.6 para a versão 2.2.7, mas está mostrando o erro abaixo no meu site.

1 exception(s):
Exception #0 (Magento\Framework\Exception\ValidatorException): Invalid template file: 'C:/xampp2/htdocs/magento2/demo1/vendor/magento/module-theme/view/frontend/templates/page/js/require_js.phtml' in module: '' block's name: 'require.js'

Exception #0 (Magento\Framework\Exception\ValidatorException): Invalid template file: 'C:/xampp2/htdocs/magento2/demo1/vendor/magento/module-theme/view/frontend/templates/page/js/require_js.phtml' in module: '' block's name: 'require.js'
#0 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Element\Template.php(300): Magento\Framework\View\Element\Template->fetchView('C:/xampp2/htdoc...')
#1 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Element\AbstractBlock.php(667): Magento\Framework\View\Element\Template->_toHtml()
#2 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Result\Page.php(248): Magento\Framework\View\Element\AbstractBlock->toHtml()
#3 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Result\Layout.php(170): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor))
#4 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\Interception\Interceptor.php(58): Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#5 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\Interception\Interceptor.php(138): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array)
#6 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\Interception\Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#7 C:\xampp2\htdocs\magento2\demo1\generated\code\Magento\Framework\View\Result\Page\Interceptor.php(130): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, Array)
#8 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\App\Http.php(139): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#9 C:\xampp2\htdocs\magento2\demo1\generated\code\Magento\Framework\App\Http\Interceptor.php(24): Magento\Framework\App\Http->launch()
#10 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\App\Bootstrap.php(257): Magento\Framework\App\Http\Interceptor->launch()
#11 C:\xampp2\htdocs\magento2\demo1\index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#12 {main}

Mesmo problema que estou enfrentando se eu atualizar o site de 2.6 para 2.3.

Existe alguma solução?

Sanjay Jethva
fonte
esta postagem resolveu meu problema.
Sanjay Jethva

Respostas:

20

se sua instalação do magento estiver rodando no Windows, em algumas versões do Magento, como na 2.2.7, temos que substituir o código do fornecedor de arquivos / magento / framework / view / elemento / modelo / arquivo / validator.php por este.

protected function isPathInDirectories($path, $directories)
{
    $realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
    if (!is_array($directories)) {
        $directories = (array)$directories;
    }

    foreach ($directories as $directory) {
        if (0 === strpos($realPath, $directory)) {
            return true;
        }
    }
    return false;
}

e agora recarregue o aplicativo magento.

Naveen Jain
fonte
11
Funcionou perfeitamente. Muito obrigado. +1
Shoaib Munir
11
muito obrigado, você salva meu dia. +1
Zeeshan Khuwaja
12

Isso deve ser apenas um problema da sua instalação local, porque sua instância do Magento está sendo executada no Windows.

Portanto, isso pode ser uma correção temporária no vendor\magento\framework\View\Element\Template\File\Validator.php

Vá para a linha número 114 e altere o número da linha e substitua a linha abaixo

$filename = str_replace('\\', '/', $filename);

com

$filename = str_replace('\\', '/', $this->fileDriver->getRealPath($filename));
Torhoehn
fonte
Olá @tho, eu apliquei esta solução e agora o site está carregando, mas a página inicial e o login do administrador mostram a página em branco.
Sanjay Jethva
11
Obrigado companheiro. trabalhou para mim. 1
Shoaib Munir
0

Para atualizar o Magento 2.2.6 para Magento 2.3.0 sem nenhum problema, acabei de atualizar um de nossos projetos em andamento do Magento 2.2.6 para 2.3.0 e nada prejudica a funcionalidade do projeto em andamento.

você pode atualizar facilmente usando a linha de comando Magento,

Você precisa seguir quatro etapas para atualizar da versão anterior para a versão mais recente Magento 2.3

For upgrade to Magento 2.3 You must require PHP 7.1.3+ or PHP 7.2.

Você não pode simplesmente atualizar usando apenas o comando update do Composer.

Espero que você seja útil acima das etapas.

Rakesh Jesadiya
fonte
Olá @Rakesh, estou usando o php versão 7.1.7 e apliquei o Sr. tho solução e site não está mostrando nenhum erro. minha loja está no modo de desenvolvimento. mas mostrando a página em branco.
Sanjay Jethva
0

Eu tive esse problema no meu caso, era um módulo que eu usei no arquivo registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_Module',
    isset($file) ? dirname($file) : __DIR__
);

o problema está nessa linha " isset ($ file)? dirname ($ file): __DIR__", então mudei para " __DIR__" e agora funciona, espero que ajude.

Raul Encinas
fonte
0

Eu sei que é um problema bastante antigo e todo mundo já conhece a solução, mas eu criei um pacote rápido baseado em compositor com correção, basta executar na raiz do Magento:

O compositor requer compatibilidade com código ideal / magento2-windows

Espero que seja útil.

Evgeny Levinsky
fonte
0

Eu recebi o mesmo erro no linux. Se você estiver executando o Magento no modo de desenvolvedor, isso pode acontecer porque o Magento não entende links simbólicos. Para permitir links simbólicos, basta executar o seguinte sql:

update `core_config_data` set `value`='1' where `path`='dev/template/allow_symlink';

Então corra: bin/magento cache:flush

HoaiNP
fonte