在Windows 10上安装Magento 2.3后,空白的管理页面

时间:2018-11-30 21:15:22

标签: php magento2

我正在使用xampp在Windows 10上本地安装Magento 2.3。我从Github下载了档案文件,解压缩到c:\xampp\htdocs\magento2,然后在浏览器中从localhost/magento2/setup运行了安装程序。

安装程序没有任何错误,但是,当我进入管理页面时,我得到了一个带有灰色背景的空白页面。当我去localhost/magento2时,得到了

I get this

当我查看magento2/var/log/system.log时,会出现一些类似以下内容的错误(对于不同的文件名列表,这些错误中的每一个都会重复多次)

main.ERROR: A symlink for "C:/xampp/htdocs/magento2/lib/web/requirejs/require.js" can't be created and placed to "C:/xampp/htdocs/magento2/pub/static/adminhtml/Magento/backend/en_US/requirejs/require.js". Warning!symlink(): Cannot create symlink, error code(1314) [] [] ) [] []

main.CRITICAL: Invalid template file: 'C:/xampp/htdocs/magento2/app/code/Magento/Backend/view/adminhtml/templates/page/js/require_js.phtml' in module: 'Magento_Backend' block's name: 'require.js' [] []

编辑:

我通过更改magento\lib\internal\Magento\Framework\View\Element\Template\File\Validator.php中的代码来使管理页面正常工作

原始代码为

public function isValid($filename)
{
    $filename = str_replace('\\', '/', $filename);
    if (!isset($this->_templatesValidationResults[$filename])) {
        $this->_templatesValidationResults[$filename] =
            ($this->isPathInDirectories($filename, $this->_compiledDir)
                || $this->isPathInDirectories($filename, $this->moduleDirs)
                || $this->isPathInDirectories($filename, $this->_themesDir)
                || $this->_isAllowSymlinks)
            && $this->getRootDirectory()->isFile($this->getRootDirectory()->getRelativePath($filename));
    }
    return $this->_templatesValidationResults[$filename];
}

我将其更改为

public function isValid($filename)
{
   return true;
}

由于我是Magento的新手,所以我不知道该方法应该做什么(我假设它正在验证模板文件,但我不知道该怎么做或在哪里)。此外,当我在原始代码中添加一个log语句以显示$this->_templatesValidationResults[$filename]的内容(在return语句之前)时,它打印了几个空数组元素。例如,它打印

[] []  
[] []
[] []
[] []

Magento似乎认为模板文件是无效的,但没有给出任何原因说明它们无效。我的说法是否正确?我该如何阻止Magento错误地将模板文件检测为无效文件,或者得到正确的验证错误消息?

可能的解决方案和其他问题

我将问题追溯到文件magento\lib\internal\Magento\Framework\View\Element\Template\File\Validator.php

功能

protected function isPathInDirectories($path, $directories)
{
    if (!is_array($directories)) {
        $directories = (array)$directories;
    }
    $realPath = $this->fileDriver->getRealPath($path);
    foreach ($directories as $directory) {
        if (0 === strpos($realPath, $directory)) {
            return true;
        }
    }
    return false;
}

问题在于$path中包含正斜杠,而$realPath中包含反斜杠,因此strpos从不返回匹配项,并且该函数始终返回false。我将功能更新为

protected function isPathInDirectories($path, $directories)
{
    if (!is_array($directories)) {
        $directories = (array)$directories;
    }
    $realPath = $this->fileDriver->getRealPath($path);
    foreach ($directories as $directory) {
        if (0 === strpos($realPath, $directory) || 0 === strpos($path, $directory)) {
            return true;
        }
    }
    return false;
}

现在它可以工作了。我认为这是仅Windows的问题?这是Magento中的错误,没有解决Windows文件命名问题吗?还是我在设置中做错了什么?

1 个答案:

答案 0 :(得分:7)

我与Windows 10上的magento 2.3有相同的问题,后台页面显示带有棕色背景的空白页面。

在网络上搜索问题后,终于找到了解决方法

  1. 在magen中打开文件 /vendor/magento/framework/View/Element/Template/File/Validator.php ,找到

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

替换为:

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

显示最终登录页面,但登录页面和登录后图标丢失

  1. 在magen中打开文件 app / etc / di.xml ,找到

    Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Symlink

并替换为

Magento\Framework\App\View\Asset\MaterializationStrategy\Copy
  1. 然后转到 var / cache ,删除所有文件夹/文件
  2. 刷新页面,完成。