从zf2模块的主供应商目录加载类

时间:2014-05-23 18:10:21

标签: php zend-framework zend-framework2 service-locator

我正在使用Zend Framework 2.3.1编写PHP应用程序。

我写了一个放在供应商目录中的ZF2模块。供应商/ TuxDrink。

该模块需要我放置在vendor / ServiceLocatorFactory(https://github.com/fezfez/ServiceLocatorFactory)中的另一个模块。

现在..我想在我的模块中使用ServiceLocatorFactory模块。但ServiceLocatorFactory目录位于应用程序的供应商目录中,而不是我的特定模块。

我的TuxDrink Module.php

<?php

namespace TuxDrink;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;

class Module implements AutoloaderProviderInterface
{
public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\ClassMapAutoloader' => array(
            __DIR__ . '/autoload_classmap.php',
        ),
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
        ),
    );
}
}

我需要添加什么才能让我的TuxDrink模块检测ServerLocatorFactory模块并允许我使用它的类。

现在我得到了

Fatal error: Class 'ServiceLocatorFactory' not found

非常感谢有关该问题的任何信息。

2 个答案:

答案 0 :(得分:2)

尽管可以自动加载,但是这个类的位置并不重要。由于模块位于vendor/我假设您使用Composer安装它们(如果没有,您应该)。

除此之外,请记住该类名为ServiceLocatorFactory\ServiceLocatorFactory,而不是ServiceLocatorFactory,这是您的错误中显示的内容。 (这可能是唯一的问题。)

我也很好奇为什么你觉得需要一个让服务经理成为全球的模块

答案 1 :(得分:2)

要考虑的几件事/最佳做法:

1)如果它是供应商/,它会被作曲家放在那里。这样,所有自动加载都配置正确。此外,.gitignore通常会忽略vendor /中的所有内容,因此请记住这一点。

2)&#39; ServiceLocatorFactory&#39;模块是一个非常糟糕的主意。最佳实践是正确注入真正的依赖关系 - 。用于全局公开ServiceManager的模块是反模式。您永远不会知道您的类具有哪些依赖关系,因为它们中的任何一个都可以从任何地方获取任何依赖关系。