8

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 (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'
  • Is it working for you? – Rohan Hapani Nov 30 '18 at 8:55
  • no still not working all extenssion are there. – MageLerner Nov 30 '18 at 8:58
20

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:

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

function isPathInDirectories replace below code in isPathInDirectories function

$realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
  • This is a very common issue, Many people are not aware of the fact that Magento does not officially support Windows servers! some hacks and un-official modifications such as this one needs to be done in order to make it work on a Windows machine, If you visit the below link "Magento 2.3.x technology stack requirements" you can see that the only supported OS is "Linux x86-64". devdocs.magento.com/guides/v2.3/install-gde/… – Yacoub Oweis Feb 2 at 8:50
  • for windows system what should be the actual code ? i am trying '\' line in first but this single back-slash is not allowed ... – Flutterer Feb 20 at 8:10
5

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

  • 1
    it makes no sense for it to not support windows but has such a simple "fix". – R T Dec 18 '18 at 8:40
5

For me, solution worked is by going to the file \vendor\magento\framework\View\Element\Template\File\Validator.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.

2

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

1

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.

1

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

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.