我正在使用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
非常感谢有关该问题的任何信息。
答案 0 :(得分:2)
尽管可以自动加载,但是这个类的位置并不重要。由于模块位于vendor/
我假设您使用Composer安装它们(如果没有,您应该)。
除此之外,请记住该类名为ServiceLocatorFactory\ServiceLocatorFactory
,而不是ServiceLocatorFactory
,这是您的错误中显示的内容。 (这可能是唯一的问题。)
我也很好奇为什么你觉得需要一个让服务经理成为全球的模块
答案 1 :(得分:2)
要考虑的几件事/最佳做法:
1)如果它是供应商/,它会被作曲家放在那里。这样,所有自动加载都配置正确。此外,.gitignore通常会忽略vendor /中的所有内容,因此请记住这一点。
2)&#39; ServiceLocatorFactory&#39;模块是一个非常糟糕的主意。最佳实践是正确注入真正的依赖关系 - 。用于全局公开ServiceManager的模块是反模式。您永远不会知道您的类具有哪些依赖关系,因为它们中的任何一个都可以从任何地方获取任何依赖关系。