Проблема автозагрузки в Zend Framework 2

При разработке на моем локальном компьютере (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;
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector