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

Posted

技术标签:

【中文标题】在 Windows 10 上安装 Magento 2.3 后的空白管理页面【英文标题】:Blank admin page after installing Magento 2.3 on Windows 10 【发布时间】:2019-05-03 01:12:49 【问题描述】:

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

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

当我查看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 的新手,我不明白这个方法应该做什么(我假设它正在验证模板文件,但我不知道如何或在哪里)。此外,当我在原始代码中添加一条日志语句以显示$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 文件命名,还是我在设置中做错了什么?

【问题讨论】:

您可以找到符号链接错误的解决方案,但对于另一个问题,请查看 ***.com/questions/53551878/… 我做了php .\bin\magento setup:static-content:deploy -f 来尝试解决符号链接错误,看起来确实创建了丢失的文件。我点击了您发布的链接,用户建议添加的代码实际上已经在validator.php 中。日志文件中不再出现符号链接错误,但我仍然收到 invalid template file 错误。错误列表的文件路径确实存在,所以我不确定为什么它认为文件有问题。 您确定没有启用 PHP 缓存吗?例如opcache 我认为 Magento 错误地将我的模板文件检测为无效。我更新了我原来的问题来解释原因。 哦,我看到您最初发送给我的链接实际上已经有类似的代码更改。当您最初将链接发送给我时,我误读了链接上的答案。 【参考方案1】:

我在 Windows 10 上使用 magento 2.3 时遇到同样的问题,后台页面显示棕色背景的空白页面。

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

    在magento安装目录中打开文件/vendor/magento/framework/View/Element/Template/File/Validator.php,找到

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

替换为:

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

终于显示登录页面,但登录页面和登录后图标不见了

    在magento安装目录中打开文件app/etc/di.xml,找到

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

并替换为

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

【讨论】:

此解决方案目前是破解核心代码以使 2.3 在 Windows 环境中工作的方法,但是当您将 Magento 更新为他们将其更改为或恢复为原始的任何内容时,它将被还原。当前的最佳实践是在 linux 客户操作系统中使用某种形式的虚拟机或类似 vagrant 的服务。这不是最快的方法,但它是继续工作的最佳方法,不会将您的工作流程作为未来的风险,将修复程序侵入核心代码。 一切正常,但未创建版本文件夹(存在版本文件)。如何解决这个问题?

以上是关于在 Windows 10 上安装 Magento 2.3 后的空白管理页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 8 上设置 Magento 环境? [关闭]

多网站magento安装上的错误路径

在安装 Magento 时出现错误“必须加载 PHP 扩展“curl””

apache config告诉WP安装位置magento 2 xampp windows

如何在Linux系统上安装Magento 2

如何在Linux系统上安装Magento 2