【问题标题】:loading classes from main vendor directory from a zf2 module从 zf2 模块从主供应商目录加载类
【发布时间】:2014-07-13 04:53:53
【问题描述】:

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

我写了一个 ZF2 模块,放在 vendor 目录中。供应商/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

任何有关该问题的信息将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    需要考虑的几件事/最佳实践:

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

    2) 'ServiceLocatorFactory' 模块是一个非常糟糕的主意。最佳实践是正确注入真正的依赖项 - .旨在全局公开 ServiceManager 的模块是反模式。你永远不会知道你的类有什么依赖,因为它们中的任何一个都可以从任何地方拉取任何依赖。

    【讨论】:

      【解决方案2】:

      类的位置无关紧要,只要它可以自动加载即可。由于模块位于vendor/ 中,我假设您使用 Composer 安装了它们(如果没有,您应该这样做)。

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

      我也很好奇为什么你觉得需要一个使服务管理器成为全局的模块

      【讨论】:

      • 我不知道如何将 serviceLocator 注入到我的模块中。我想我需要学习如何做到这一点
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多