File templat magento2.3.0 tidak valid


13

Saya baru saja menginstal versi terbaru Magento yaitu Magento 2.3.0 di mesin wamp lokal dengan php 7.2.4

Menginstalnya menggunakan antarmuka baris perintah.

Tetapi ketika saya lelah untuk menjalankannya menunjukkan saya kesalahan suka

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'

Apakah ini berhasil untuk Anda?
Rohan Hapani

tidak masih tidak bekerja semua ekstenssi ada di sana.
MageLerner

Jawaban:


37

Ya, ini masalah dengan windows. Windows menggunakan "\" sebagai pemisah, array "direktori" berisi entri dengan "/" sebagai pemisah, sehingga pemeriksaan akan selalu gagal. Jadi, Anda perlu memperbaiki ini dengan mengganti pemisah di file inti:

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

fungsi isPathInDirectories menggantikan kode di bawah ini dalam fungsi isPathInDirectories

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

Ini adalah masalah yang sangat umum, Banyak orang tidak menyadari fakta bahwa Magento tidak secara resmi mendukung server Windows! beberapa peretasan dan modifikasi tidak resmi seperti ini perlu dilakukan untuk membuatnya berfungsi pada mesin Windows, Jika Anda mengunjungi tautan di bawah "Persyaratan tumpukan teknologi Magento 2.3.x" Anda dapat melihat bahwa satu-satunya OS yang didukung adalah "Linux x86-64". devdocs.magento.com/guides/v2.3/install-gde/…
Yacoub

untuk sistem windows apa yang seharusnya menjadi kode aktual? saya mencoba baris '\' terlebih dahulu tetapi back-slash tunggal ini tidak diizinkan ...
Flutterer

Oke, jadi saya mengerti bahwa mereka tidak secara resmi mendukung Windows, tetapi tidak bisakah mereka hanya menggunakan DIRECTORY_SEPARATORseperti dunia lain dan tidak memiliki masalah khusus ini yang sepertinya merupakan satu-satunya hal dari bekerja di Windows?
ACJ

10

Bagi saya, solusi yang berhasil adalah dengan membuka file \ vendor \ magento \ framework \ View \ Element \ Template \ File \ Validator.php dan mengganti definisi fungsi di bawah ini seperti di bawah ini:

> 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: Ini masalah khusus windows.



3

Ini masalah inti bukan hanya Magento 2.3.0, tapi saya juga menghadapi masalah itu di Magento 2.2.7. Untuk membuat kode berfungsi di windows daripada menggunakan realpath, gunakan saja argumen $ path yang diteruskan ke metode ini

Buka path /vendor/magento/framework/View/Element/Template/File/Validator.php dan alih-alih baris

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

menggunakan

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

Atau ikuti diskusi ini https://github.com/magento/magento2/issues/19480


2

Di Magento 2.2.9 ganti /vendor/magento/framework/View/Element/Template/File/Validator.php kode fungsi isPathInDirectories dengan kode ini

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

Ini mungkin terjadi ketika berkembang di bawah Sistem Windows.

Pergi ke baris 140 di file Path /vendor/magento/framework/View/Element/Template/File/Validator.php Ganti kode baris ini

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

Dengan

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

Waspadalah terhadap baris kode ini

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

Ini mungkin tidak akan berhasil karena scape backslash php. Anda harus melakukan double backslash untuk memberi tahu PHP secara eksplisit bahwa itu tidak berurusan dengan baris baru di sini tetapi backslash.


1

Silakan Lihat itu, Ini harus tebasan ganda yaitu "\\"

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

1

Seperti disebutkan masalahnya adalah kompatibilitas Windows. Tetapi saya akan merekomendasikan untuk mengubahnya sedikit berbeda untuk bekerja bahkan ketika memigrasi sistem, misalnya untuk pengembangan lokal pada Windows dan kemudian penyebaran pada server Linux. Sehingga hanya jika Anda beroperasi pada Windows Anda akan menyesuaikan jalur.

Di

\ vendor \ magento \ framework \ Lihat \ Elemen \ Template \ File \ Validator.php

di

function isPathInDirectories ()

menggantikan

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

dengan:

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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.