При разработке на моем локальном компьютере (MAMP) zf2 прекрасно загружает этот класс, но когда он помещается на сервер, он не работает.
Класс, который я создал, является обычным классом PHP и находится в следующем каталоге. Пространство имен объявлено и правильно.
module/ModuleName/src/Entity/TheEntity.php
Я пытаюсь получить доступ к этому классу из модели (какой-то файл в src / Model / SomeModelFile.php). У меня есть оператор использования после объявления пространства имен в этом файле.
namespace ModuleName\Model;
use ModuleName\Entity\TheEntity;
На моей локальной машине я могу создать экземпляр этого объекта из модели, но на сервере, который я использую, я не могу. При создании этого объекта я получаю следующую ошибку:
Fatal error: Class 'ModuleName\Entity\TheEntity' not found...
Я снова запустил composer, чтобы убедиться, что файлы автозагрузки перестраиваются, и он запускается — это вывод:
php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
Я также создал новую пустую сущность с именем «testEntity» в том же каталоге src / Entity, это также хорошо работало на моем локальном компьютере, но не получилось на сервере. На обоих серверах установлена одна и та же версия PHP, но есть некоторые различия в конфигурации.
Что я должен искать, какие-либо идеи, что может быть причиной этого?
Обновить
Я использовал git для автоматического развертывания файлов на сервере, что происходит, когда репозиторий клонируется, а затем запускается composer.
Я скопировал свои файлы прямо на веб-сервер без запуска Composer & все работало. После небольшой копки я обнаружил, что vendor / composer / autoload_real.php отличается для каждого. Когда composer запускается, он обновляет этот файл, и это не работает (требует использования autoload_static.php).
Что может вызвать это, какие файлы я должен проверить для конфигурации композитора?
Вот рабочая версия, сгенерированная композитором на моем ноутбуке:
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitc3e0a30879285d1b7c445edcf1beee91
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitc3e0a30879285d1b7c445edcf1beee91', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInitc3e0a30879285d1b7c445edcf1beee91', 'loadClassLoader'));
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
$loader->register(true);
return $loader;
}
}
function composerRequirec3e0a30879285d1b7c445edcf1beee91($file)
{
require $file;
}
А вот тот, который не работает (генерируется сервером)
<?php
//on Server (DEV)
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit2d27d41ac16b73f0303f55e7010dca0c
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit2d27d41ac16b73f0303f55e7010dca0c', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit2d27d41ac16b73f0303f55e7010dca0c', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
var_dump($useStaticLoader);
exit;
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit2d27d41ac16b73f0303f55e7010dca0c::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(true);
return $loader;
}
}
Задача ещё не решена.
Других решений пока нет …