Arquivo de modelo inválido magento2.3.0


13

Eu instalei recentemente a versão mais recente do magento, ou seja, o Magento 2.3.0 em uma máquina wamp local com php 7.2.4

Instalei usando a interface da linha de comandos.

Mas quando eu cansei de executá-lo, mostre-me um erro como

Exception #0 (Magento\Framework\Exception\ValidatorException): Invalid template file: 'D:/wamp64/www/mage23/vendor/magento/module-theme/view/frontend/templates/page/js/require_js.phtml' in module: '' block's name: 'require.js'

Está funcionando para você?
Rohan Hapani

ainda não está funcionando todas as extensões existem.
MageLerner

Respostas:


36

Sim, este é o problema do Windows. O Windows usa "\" como separador, a matriz "diretórios" contém entradas com "/" como separador, portanto, a verificação sempre falha. Então, você precisa corrigir isso substituindo o separador no arquivo principal:

Magento\Framework\View\Element\Template\File\Validator

A função isPathInDirectories substitui o código abaixo na função isPathInDirectories

$realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));

Este é um problema muito comum. Muitas pessoas não sabem que o Magento não suporta oficialmente servidores Windows! alguns hacks e modificações não oficiais, como esta, precisam ser feitas para que funcionem em uma máquina Windows. Se você visitar o link abaixo "Requisitos da pilha de tecnologia Magento 2.3.x", poderá ver que o único SO suportado é "Linux x86-64". devdocs.magento.com/guides/v2.3/install-gde/…
Yacoub Oweis

para o sistema windows, qual deve ser o código real? Eu estou tentando '\' linha em primeiro lugar, mas esta barra invertida única não é permitida ...
Flutterer

Ok, entendo que eles não oferecem suporte oficial ao Windows, mas eles não poderiam usar apenas DIRECTORY_SEPARATORcomo o resto do mundo e não têm esse problema específico que parece ser a única coisa que funciona no Windows?
ACJ 25/02

10

Para mim, a solução trabalhada é ir para o arquivo \ vendor \ magento \ framework \ View \ Element \ Template \ File \ Validator.php e substituir a definição de função abaixo, como abaixo:

> protected function isPathInDirectories($path, $directories) {
>     if (!is_array($directories)) {
>         $directories = (array)$directories;
>     }
>     $realPath = $this->fileDriver->getRealPath($path);
>     $realPath = str_replace('\\', '/', $realPath); // extra code added
>     foreach ($directories as $directory) {
>         if (0 === strpos($realPath, $directory)) {
>             return true;
>         }
>     }
>     return false; }

PS: Este é um problema específico do Windows.



3

É a questão principal não apenas do Magento 2.3.0, mas também enfrentei esse problema no Magento 2.2.7. Para fazer o código funcionar no Windows em vez de usar o caminho real, use o argumento $ path passado ao método

Vá para o caminho /vendor/magento/framework/View/Element/Template/File/Validator.php e em vez da linha

if (0 === strpos($realPath, $directory)) {

usar

if (0 === strpos($path, $directory)) {

Ou siga esta discussão https://github.com/magento/magento2/issues/19480


2

No Magento 2.2.9, substitua o código de função /vendor/magento/framework/View/Element/Template/File/Validator.php isPathInDirectories por este código

protected function isPathInDirectories($path, $directories)
{
    if (!is_array($directories)) {
        $directories = (array)$directories;
    }
    foreach ($directories as $directory) {
        if (0 === strpos(str_replace('\\', '/', $this->fileDriver->getRealPath($path)), $directory)) {
            return true;
        }
    }
    return false;
}

1

Isso provavelmente acontece durante o desenvolvimento no sistema Windows.

Vá para a linha 140 no arquivo Path /vendor/magento/framework/View/Element/Template/File/Validator.php Substitua este código de linha

$realPath = $this->fileDriver->getRealPath($path);

Com

$realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));

Cuidado com esta linha de código

$realPath = str_replace('\', '/', $this->fileDriver->getRealPath($path));

Provavelmente não funcionará por causa da barra invertida do php. você tem que fazer uma barra invertida dupla para dizer ao PHP explicitamente que não está lidando com nova linha aqui, mas com uma barra invertida.


1

Por favor, veja que, deve ser barra dupla, ou seja, "\\"

$realPath = str_replace('\\\', '/', $this->fileDriver->getRealPath($path));

1

Como mencionado, o problema é a compatibilidade do Windows. Mas eu recomendaria alterá-lo de maneira um pouco diferente para funcionar mesmo durante a migração de sistemas, por exemplo, para desenvolvimento local no Windows e implantação posterior em um servidor Linux. Portanto, apenas no caso de você estar operando no Windows, você ajustará o caminho.

No

\ vendor \ magento \ framework \ View \ Element \ Template \ File \ Validator.php

no

função isPathInDirectories ()

substituir

$realPath = $this->fileDriver->getRealPath($path);

com:

a) PHP> = 7.2:

if (PHP_OS_FAMILY === 'Windows')
  $realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
else
  $realPath = $this->fileDriver->getRealPath($path);

b) PHP <7.2:

if (strtolower(substr(PHP_OS, 0, 3)) === 'win')
  $realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
else
  $realPath = $this->fileDriver->getRealPath($path);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.