У меня есть некоторые проблемы с Magento 2. Я сделал свой собственный модуль, он выглядит нормально, но когда я установил свой модуль и сделал php bin/magento setup:di:compile
, появляется эта ошибка:
[ReflectionException] Класс \ MyInstaller не существует
брошено setup/src/Magento/Setup/Module/PhpScanner.php
Класс MyInstaller существует, однако я изменил путь к файлу класса. Первоначально был путь /my-libraries/MyInstaller.php
, но когда я тестировал его локально, у меня была ошибка, как указано выше:
[ReflectionException] Класс \ MyInstaller не существует
Когда я изменил имя папки на mylibraries, на localhost все работает нормально. Однако, когда я устанавливаю модуль на внешний сервер, у меня ReflectionException
. Не отображается, когда я меняю имя папки на исходное - «my-library». Как я заметил, Magento все еще призывает к старому пути. Тем не менее, я попытался запустить новый экземпляр Magento 2, и я все еще получаю эту ошибку.
Я пытался очистить кеш:
bin/magento cache:clean
bin/magento cache:flush
Я тоже пытался удалить папку /var
. После включения моего модуля я делаю:
php bin/magento setup:upgrade
и
php bin/magento setup:static-content:deploy
Не могли бы вы сказать мне, как я могу заставить Magento использовать новый путь к файлу? Или я должен изменить некоторые настройки кэша на моем сервере?
Добавляю, в классе MyInstaller нет пространства имен, потому что я использую тот же файл в других модулях. Но, я думаю, они не нужны, если на локальном хосте нет ошибки.
Существует код класса MyInstaller:
<?php
if (!class_exists('MyInstaller', false)) {
class MyInstaller implements MyInterface
{
private $translations;
private $sliderEnabled = true;
private $pages = array();
public function __construct($sliderEnabled = true, array $translations = array())
{
$this->sliderEnabled = $sliderEnabled;
$this->setTranslations($translations);
}
public function setTranslations(array $translations = array())
{
$this->translations = $translations;
}
public function addPages(array $pages = array())
{
$this->pages = array_values($pages);
}
public function renderInstallerSteps()
{
if (!$this->sliderEnabled || empty($this->pages) || !is_array($this->pages)) {
return '';
}
$requirements = $this->checkRequirements();
$params = array(
'requirements' => $requirements,
'translations' => $this->translations
);
$maxSteps = 0;
$data = array(
'steps' => array()
);
foreach ($this->pages as $page) {
$page = (int)$page;
if ($page > 0) {
$step = $this->loadStep($page, $params);
$data['steps'][$page] = $step;
$maxSteps++;
}
}
if ($maxSteps === 0) {
return '';
}
$data['maxSteps'] = $maxSteps;
return $this->loadTemplate('installer', $data);
}
private function loadStep($number, $params = null)
{
$step = $this->loadTemplate('step' . $number, $params);
$step = $this->removeNewLines($step);
return $step;
}
private function removeNewLines($string)
{
return trim(str_replace(PHP_EOL, ' ', $string));
}
private function loadTemplate($view, $data = null)
{
extract(array("content" => $data));
ob_start();
$viewFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'theme' . DIRECTORY_SEPARATOR . "$view.tpl.php";
if (file_exists($viewFile)) {
include $viewFile;
} else {
throw new Exception('View not exist in ' . get_class($this));
}
$content = ob_get_clean();
return $content;
}
private function checkRequirements()
{
$data = array(
'php' => array(
'test' => (version_compare(PHP_VERSION, '5.2.0') > 0),
'label' => $this->translations['php_version']
),
'curl' => array(
'test' => function_exists('curl_version'),
'label' => $this->translations['curl_enabled']
),
'soap' => array(
'test' => class_exists('SoapClient'),
'label' => $this->translations['soap_enabled']
)
);
return $data;
}
}
}
Извините, если описание хаотично, это мой первый пост здесь.