TransWikia.com

Invalid template file magento2.3.0

Magento Asked by MageLerner on December 10, 2021

I have recently installed magento latest version i.e. Magento 2.3.0 in local wamp machine with php 7.2.4

Installed it using command line interface.

But when i tired to run it show me error like

Exception #0 (MagentoFrameworkExceptionValidatorException): 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'

10 Answers

in magento 2.4 Validator.php path is:

....libinternalMagentoFrameworkViewElementTemplateFileValidator.php

Answered by hossein rezaeizadeh on December 10, 2021

In my situation I set only one colon in xml file in path for template like this Vendor_Modulename:product/view/template.phtml but the the write way is to Vendor_Modulename::product/view/template.phtml. It may be invisible error

Answered by Anton Mikhaylenko on December 10, 2021

As mentioned the issue is Windows compatability. But I would recommend to change it a bit differently to work even when migrating systems, e.g. for local development on Windows and later deployment on a Linux server. So that only in case you are operating on Windows you will adjust the path.

In

vendormagentoframeworkViewElementTemplateFileValidator.php

in

function isPathInDirectories()

replace

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

with:

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

Answered by Christian on December 10, 2021

In Magento 2.2.9 replace /vendor/magento/framework/View/Element/Template/File/Validator.php isPathInDirectories function code with this 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;
}

Answered by Sanaullah Ahmad on December 10, 2021

It's the core issue of not just Magento 2.3.0, but I faced that problem in Magento 2.2.7 as well. In order to make the code work on windows instead of using realpath just use the $path argument passed to the method

Go to path /vendor/magento/framework/View/Element/Template/File/Validator.php and instead of the line

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

use

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

Or follow this discussion https://github.com/magento/magento2/issues/19480

Answered by Naveed Abbas on December 10, 2021

For me, solution worked is by going to the file vendormagentoframeworkViewElementTemplateFileValidator.php and replacing the below function definition as below:

 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: This is windows specific issue.

Answered by Tejas Vyas on December 10, 2021

This probably happens when developing under Windows System.

Go to line 140 in file Path /vendor/magento/framework/View/Element/Template/File/Validator.php Replace this code of line

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

With

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

Beware of this line of code

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

This won't probably work because of the php backslash scape. you have to do double backslash to tell PHP explicitly that it is not dealing with new line here but a backslash.

Answered by Mubo on December 10, 2021

Please See that,It should be double slash i.e "\"

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

Answered by zuber bandi on December 10, 2021

Yes, This is the problem with windows. Windows uses "" as separator, the array "directories" contains entries with "/" as separator, so the check will always fail. So you need to fix this by replacing the separator in core file:

MagentoFrameworkViewElementTemplateFileValidator

function isPathInDirectories replace below code in isPathInDirectories function

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

Answered by Saurabh Dwivedi on December 10, 2021

Magento 2.3 does not support windows. You can find my solution here: enter link description here

Answered by Vincent on December 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP