我正在使用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的新手,所以我不知道该方法应该做什么(我假设它正在验证模板文件,但我不知道该怎么做或在哪里)。此外,当我在原始代码中添加一个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文件命名问题吗?还是我在设置中做错了什么?
答案 0 :(得分:7)
我与Windows 10上的magento 2.3有相同的问题,后台页面显示带有棕色背景的空白页面。
在网络上搜索问题后,终于找到了解决方法
在magen中打开文件 /vendor/magento/framework/View/Element/Template/File/Validator.php ,找到
$ realPath = $ this-> fileDriver-> getRealPath($ path);
替换为:
$realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
显示最终登录页面,但登录页面和登录后图标丢失
在magen中打开文件 app / etc / di.xml ,找到
Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Symlink
并替换为
Magento\Framework\App\View\Asset\MaterializationStrategy\Copy