在 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 时出现错误“必须加载 PHP 扩展“curl””