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'
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP