Geçersiz şablon dosyası magento2.3.0


13

Son zamanlarda magento son sürümünü yani Magento 2.3.0'ı yerel wamp makinesine php 7.2.4

Komut satırı arabirimini kullanarak yükledi.

Ama çalıştırmak için yorgun zaman bana gibi hata göstermek

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'

Senin için çalışıyor mu?
Rohan Hapani

hala çalışmayan tüm genişleme vardır.
MageLerner

Yanıtlar:


37

Evet, Windows ile ilgili sorun budur. Windows ayırıcı olarak "\" kullanır, "dizinler" dizisi ayırıcı olarak "/" içeren girişler içerir, bu nedenle denetim her zaman başarısız olur. Bu nedenle, çekirdek dosyadaki ayırıcıyı değiştirerek bunu düzeltmeniz gerekir:

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

fonksiyon isPathInDirectories kod aşağıda yerini isPathInDirectories fonksiyonu

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

Bu çok yaygın bir konudur, Birçok insan Magento'nun Windows sunucularını resmi olarak desteklemediğinin farkında değildir! Bazı hack'ler ve bunun gibi resmi olmayan değişiklikler bir Windows makinesinde çalışması için yapılması gerekiyor, Eğer aşağıdaki bağlantıyı ziyaret ederseniz "Magento 2.3.x teknoloji yığını gereksinimleri" sadece desteklenen işletim sisteminin olduğunu görebilirsiniz "Linux x86-64". devdocs.magento.com/guides/v2.3/install-gde/…
Yacoub Oweis

windows sistemi için gerçek kod ne olmalıdır? ilk '\' satır çalışıyorum ama bu tek ters eğik çizgi izin verilmiyor ...
Flutterer

Tamam, bu yüzden resmi olarak Windows'u desteklemediklerini anladım, ancak sadece DIRECTORY_SEPARATORdünyanın geri kalanı gibi kullanamazlar ve Windows'da çalışmanın tek şeyi gibi görünen bu özel sorunla karşılaşamazlar mı?
ACJ

10

Benim için çalışılan çözüm, \ vendor \ magento \ framework \ View \ Element \ Template \ File \ Validator.php dosyasına giderek ve aşağıdaki işlev tanımını aşağıdaki gibi değiştirerek:

> 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; }

Not: Bu Windows'a özgü bir sorundur.



3

Bu sadece Magento 2.3.0'ın değil, aynı zamanda Magento 2.2.7'de de karşılaştım. Kodun realpath kullanmak yerine pencerelerde çalışmasını sağlamak için, yönteme iletilen $ path bağımsız değişkenini kullanın

/Vendor/magento/framework/View/Element/Template/File/Validator.php yoluna ve satır yerine git

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

kullanım

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

Veya bu tartışmayı takip edin https://github.com/magento/magento2/issues/19480


2

Magento 2.2.9'da /vendor/magento/framework/View/Element/Template/File/Validator.php isPathInDirectories işlev kodunu bu kodla değiştirin

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

Bu muhtemelen Windows Sistemi altında geliştirilirken olur.

Path /vendor/magento/framework/View/Element/Template/File/Validator.php dosyasında 140 numaralı satıra gidin Bu satır kodunu değiştirin

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

İle

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

Bu kod satırına dikkat edin

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

Php ters eğik çizgi scape nedeniyle bu muhtemelen işe yaramaz. PHP'ye açıkça burada yeni satırla değil ters eğik çizgi ile uğraştığını söylemek için çift ters eğik çizgi yapmanız gerekir.


1

Lütfen bakın, çift eğik çizgi yani "\\" olmalıdır

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

1

Belirtildiği gibi, sorun Windows uyumluluğudır. Ancak, örneğin Windows'ta yerel geliştirme ve daha sonra bir Linux sunucusuna dağıtım için sistemleri taşırken bile çalışmasını biraz farklı bir şekilde değiştirmenizi tavsiye ederim. Böylece yalnızca Windows üzerinde çalışmanız durumunda yolu ayarlayabilirsiniz.

İçinde

\ Satıcı \ magento \ framework \ Görünüm \ Eleman \ Şablon \ Dosya \ Validator.php

içinde

işlevi isPathInDirectories ()

değiştirmek

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

ile:

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.