Zend Framework 2自动加载问题

时间:2017-11-21 19:49:16

标签: php apache zend-framework2 entity autoload

在我的本地计算机(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;
    }
}

0 个答案:

没有答案