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'
MageLerner
sumber
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));
Saurabh Dwivedi
sumber
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.

Tejas Vyas
sumber
6

Magento 2.3 tidak mendukung windows. Anda dapat menemukan solusi saya di sini: masukkan uraian tautan di sini

Vincent
sumber
2
tidak masuk akal untuk tidak mendukung windows tetapi memiliki "perbaikan" yang sederhana.
RT
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

Naveed Abbas
sumber
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;
}
Sanaullah Ahmad
sumber
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.

Mubo
sumber
1

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

$realPath = str_replace('\\\', '/', $this->fileDriver->getRealPath($path));
zuber bandi
sumber
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);
Kristen
sumber