Проблема с автозагрузчиком при развертывании php сайта на героку - PullRequest
0 голосов
/ 25 февраля 2020

У меня проблемы с работой автозагрузчика, когда мой код php развернут на heroku. Я использую пространства имен.

Структура файла

Журнал Heroku

Он работает правильно в localhost. Я уже внес изменения, необходимые для перевода путей с localhost на heroku, поскольку heroku использует / app в качестве документа root. Таким образом, в приведенном ниже случае BASEURL имеет значение:

define('BASEURL', $_SERVER['DOCUMENT_ROOT']); 

Вот часть файла инициализации:

spl_autoload_register('myAutoLoaderPerson');

function myAutoLoaderPerson($className) {
    $path = BASEURL . '/classes/';      
    $extension = '.class.php';
    $fullPath = $path . $className . $extension;        

    require $fullPath;
}

Что я делаю не так?

1 Ответ

0 голосов
/ 25 февраля 2020

Вы уверены, что $_SERVER['DOCUMENT_ROOT']) правильно заполнено?

Я бы скорее рекомендовал определить BASEURL, используя некоторое относительное определение, например, если Документ Root равен двум папка над файлом, определяющая BASEURL:

define('BASEURL', realpath(__DIR__ . "/../../"));

Или упрощение вашего автозагрузчика, чтобы сделать путь к нему относительным:

spl_autoload_register('myAutoLoaderPerson');

function myAutoLoaderPerson($className) {
    require_once __DIR__ . "/../../../classes/$className.class.php";
}

Вы предложили вернуть /app/classes/lib\foo.class.php.

Обратите внимание на сочетание / и \. Возможно, разница в том, что вы находитесь на локально, но на удаленно.

Если вы следуете PSR-4 соглашение, то это означает, что ваши пространства имен должны совпадать с каталогами, но для этого вам, вероятно, нужно преобразовать \ в /.

Может быть так:

spl_autoload_register('myAutoLoaderPerson');

function myAutoLoaderPerson($className) {
    require_once __DIR__ . "/../<path..to>/classes/" . strtr($classname, "\\", "/") . ".class.php";
}


...