在我的本地计算机(MAMP)上进行开发时,zf2会很好地加载这个类,但当它被放到服务器上时它不起作用。
我创建的类只是一个普通的PHP类,它位于以下目录中。声明名称空间是正确的。
module/ModuleName/src/Entity/TheEntity.php
我试图从模型中访问此类(src / Model / SomeModelFile.php中的某个文件)。我在此文件中的名称空间声明后面有一个using语句。
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;
}
}