Я устанавливаю Magento 2.3 локально на Windows 10 с xampp.Я скачал архив с 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, или я что-то неправильно сделал в моей настройке?