File modello magento2.3.0 non valido


13

Di recente ho installato la versione più recente di Magento, ad esempio Magento 2.3.0 nella macchina per wamp locale con php 7.2.4

Installato usando l'interfaccia della riga di comando.

Ma quando sono stanco di eseguirlo mi mostra un errore simile

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'

Funziona per te?
Rohan Hapani,

non funziona ancora, tutte le estensioni ci sono.
MageLerner,

Risposte:


37

Sì, questo è il problema con Windows. Windows usa "\" come separatore, l'array "directory" contiene voci con "/" come separatore, quindi il controllo fallirà sempre. Quindi è necessario risolvere questo problema sostituendo il separatore nel file principale:

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

La funzione isPathInDirectories sostituisce il codice seguente nella funzione isPathInDirectories

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

Questo è un problema molto comune, molte persone non sono consapevoli del fatto che Magento non supporta ufficialmente i server Windows! alcuni hack e modifiche non ufficiali come questo devono essere fatti per farlo funzionare su un computer Windows. Se visiti il ​​link sottostante "Requisiti dello stack tecnologico Magento 2.3.x" puoi vedere che l'unico sistema operativo supportato è "Linux x86-64". devdocs.magento.com/guides/v2.3/install-gde/…
Yacoub Oweis

per il sistema Windows quale dovrebbe essere il codice attuale? sto provando prima la riga "\" ma questa singola barra rovesciata non è consentita ...
Flutterer,

Va bene, quindi capisco che non supportano ufficialmente Windows, ma non potrebbero semplicemente usarlo DIRECTORY_SEPARATORcome il resto del mondo e non avere questo problema specifico che sembra l'unica cosa dal farlo funzionare in Windows?
ACJ

10

Per me, la soluzione ha funzionato andando nel file \ vendor \ magento \ framework \ View \ Element \ Template \ File \ Validator.php e sostituendo la definizione di funzione seguente come di seguito:

> 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: questo è un problema specifico di Windows.



3

È il problema principale non solo di Magento 2.3.0, ma ho affrontato quel problema anche in Magento 2.2.7. Per far funzionare il codice su Windows invece di usare realpath basta usare l'argomento $ path passato al metodo

Vai al percorso /vendor/magento/framework/View/Element/Template/File/Validator.php e invece della riga

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

uso

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

Oppure segui questa discussione https://github.com/magento/magento2/issues/19480


2

In Magento 2.2.9 sostituisci /vendor/magento/framework/View/Element/Template/File/Validator.php isPathInDirectories con questo codice

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

Questo probabilmente accade quando si sviluppa in Sistema Windows.

Vai alla riga 140 nel file Path /vendor/magento/framework/View/Element/Template/File/Validator.php Sostituisci questo codice di riga

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

Con

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

Fai attenzione a questa riga di codice

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

Questo probabilmente non funzionerà a causa del php backslash scape. devi fare una doppia barra rovesciata per dire esplicitamente a PHP che qui non si tratta di una nuova linea ma di una barra rovesciata.


1

Si prega di vedere che, dovrebbe essere doppia barra cioè "\\"

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

1

Come accennato, il problema è la compatibilità di Windows. Ma consiglierei di cambiarlo in modo un po 'diverso per funzionare anche durante la migrazione dei sistemi, ad esempio per lo sviluppo locale su Windows e la successiva distribuzione su un server Linux. In modo che solo nel caso in cui si operi su Windows, si regola il percorso.

In

\ Vendor \ Magento \ Framework \ Vista \ elemento \ Template \ File \ Validator.php

in

funzione isPathInDirectories ()

sostituire

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

con:

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.