Fichier de modèle non valide magento2.3.0

13

J'ai récemment installé la dernière version de magento, c.-à-d. Magento 2.3.0 dans une machine locale avec php 7.2.4

Installé en utilisant l'interface de ligne de commande.

Mais quand je suis fatigué de courir, montrez-moi une erreur comme

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'
MageLerner
la source
Est-ce que ça marche pour vous?
Rohan Hapani
aucun ne fonctionne toujours pas tous les extenssion sont là.
MageLerner

Réponses:

37

Oui, c'est le problème avec Windows. Windows utilise "\" comme séparateur, le tableau "répertoires" contient des entrées avec "/" comme séparateur, donc la vérification échouera toujours. Vous devez donc résoudre ce problème en remplaçant le séparateur dans le fichier core:

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

La fonction isPathInDirectories remplace le code ci-dessous dans la fonction isPathInDirectories

$realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
Saurabh Dwivedi
la source
Il s'agit d'un problème très courant, de nombreuses personnes ne sont pas conscientes du fait que Magento ne prend pas officiellement en charge les serveurs Windows! certains hacks et modifications non officielles tels que celui-ci doivent être effectués pour le faire fonctionner sur une machine Windows. Si vous visitez le lien ci-dessous "Exigences de la pile technologique Magento 2.3.x", vous pouvez voir que le seul système d'exploitation pris en charge est "Linux x86-64". devdocs.magento.com/guides/v2.3/install-gde/…
Yacoub Oweis
pour le système Windows, quel devrait être le code réel? j'essaye la ligne '\' en premier mais cette seule barre oblique
inverse
D'accord, je comprends qu'ils ne prennent pas officiellement en charge Windows, mais ne pourraient-ils pas simplement utiliser DIRECTORY_SEPARATORcomme le reste du monde et ne pas avoir ce problème spécifique qui semble être la seule chose à le faire fonctionner sous Windows?
ACJ
10

Pour moi, la solution a fonctionné en allant dans le fichier \ vendor \ magento \ framework \ View \ Element \ Template \ File \ Validator.php et en remplaçant la définition de fonction ci-dessous comme ci-dessous:

> 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: Il s'agit d'un problème spécifique à Windows.

Tejas Vyas
la source
6

Magento 2.3 ne prend pas en charge les fenêtres. Vous pouvez trouver ma solution ici: entrez la description du lien ici

Vincent
la source
2
cela n'a aucun sens de ne pas prendre en charge Windows, mais il a un simple "correctif".
RT
3

C'est le problème principal non seulement de Magento 2.3.0, mais j'ai également rencontré ce problème dans Magento 2.2.7. Afin de faire fonctionner le code sur Windows au lieu d'utiliser realpath, utilisez simplement l'argument $ path passé à la méthode

Accédez au chemin /vendor/magento/framework/View/Element/Template/File/Validator.php et au lieu de la ligne

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

utilisation

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

Ou suivez cette discussion https://github.com/magento/magento2/issues/19480

Naveed Abbas
la source
2

Dans Magento 2.2.9, remplacez /vendor/magento/framework/View/Element/Template/File/Validator.php le code de la fonction isPathInDirectories par ce code

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;
}
Sanaullah Ahmad
la source
1

Cela se produit probablement lors du développement sous Windows.

Allez à la ligne 140 dans le fichier Path /vendor/magento/framework/View/Element/Template/File/Validator.php Remplacez ce code de ligne

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

Avec

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

Méfiez-vous de cette ligne de code

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

Cela ne fonctionnera probablement pas en raison de la barre oblique inverse de PHP. vous devez faire une double barre oblique inverse pour dire explicitement à PHP qu'il ne s'agit pas ici d'une nouvelle ligne mais d'une barre oblique inverse.

Mubo
la source
1

Veuillez voir que cela devrait être une double barre oblique, c'est-à-dire "\\"

$realPath = str_replace('\\\', '/', $this->fileDriver->getRealPath($path));
zuber bandi
la source
1

Comme mentionné, le problème est la compatibilité de Windows. Mais je recommanderais de le changer un peu différemment pour fonctionner même lors de la migration de systèmes, par exemple pour le développement local sur Windows et le déploiement ultérieur sur un serveur Linux. De sorte que seulement dans le cas où vous utilisez Windows, vous ajusterez le chemin.

Dans

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

dans

function isPathInDirectories ()

remplacer

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

avec:

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);
Christian
la source