【问题标题】:is it possible to use Zend Service Manager with custom codebase?是否可以将 Zend Service Manager 与自定义代码库一起使用?
【发布时间】:2018-01-19 20:20:19
【问题描述】:

我想在我的自定义代码库中使用 Zend Service Manager。它不是基于 Zend MVC 构建的,而是我只使用了一些 Zend 包,例如 Zend Console 和 Zend Config。

我想使用 Zend Service Manager 的功能,只要代码进入我的 Core 类,我想初始化 DB 和 Config 对象并将它们保存为 Zend Service Manager 中的服务。现在我想在我的代码库中使用这项服务。

有没有办法在每个类的构造函数中不传递服务管理器来使用它?此外,我的其他类不会从这个 Core 类扩展,而是这个 Core 类将根据我的要求创建对象。

这就是我创建服务的方式:

    $config = \Zend\Config\Factory::fromFiles([
        APPLICATION_PATH . '/config/config.ini',
        APPLICATION_PATH . '/config/' . $route->getMatchedParam('brand') . '/' . $route->getMatchedParam('department') . '/config.ini',
    ]);

    $serviceManager = new ServiceManager([
        'factories' => [
            stdClass::class => InvokableFactory::class,
        ],
    ]);

    $serviceManager->setService('config', $config);

【问题讨论】:

    标签: php zend-framework zend-framework3 zend-servicemanager


    【解决方案1】:

    是的,您可以在任何地方使用它。这是 zf 最好的部分,您可以在任何地方使用它的部分。不,您不必在构造方法上传递配置。它具有“setFactory”和“setService”方法以及许多其他方法。结帐documentation

    【讨论】:

    • 感谢您的回复,但我想在我的代码库中提供此服务。我正在使用 composer PSR-4 自动加载器路径来加载我的项目。所以我想出的解决方案是使用静态方法创建一个新类并从中返回 Zend Service Manager,这样我就可以在我的代码中调用它的对象。难道没有一种直接的方法可以在我的代码中保持此服务可用吗?
    • 嗯.. 静态方法还不错。是的,它违反了依赖注入。但如果你必须使用它,我认为没关系。我不知道你的代码库。你的算法是如何工作的?它是在 DI 还是全局变量上运行的?如果您使用全局变量,请在“init.php”页面上定义一个变量并使用它。如果我们谈论 zend-mvc,ApplicationFactory 构建的应用程序,并且 index.php 触发它的“运行”方法。之后,当您需要服务管理器时,应用程序会为您提供相同的实例。如果你可以用静态方法写这个,一定要使用它。
    • 你也可以查看 zf-expressive 的初始化页面。它首先构建服务管理器,然后运行应用程序。这可以是另一种方法。
    • 实际上我的应用程序仅用于 cron 作业,但我必须使用 Zend。因此我从这个开始:github.com/zfcampus/zf-console 现在使用基于控制台的应用程序,我没有任何基于 MVC 或服务的结构。我将代码保存在 Src 文件夹中并通过 Composer 加载它。现在我想实现这个服务功能,这样我就可以保留我所有的对象;在其中记录、配置、DB1、DB2,以便我可以在整个代码库中快速访问它。是否可以跳过这个 Zend 服务,而是创建一个具有静态函数的类来获取和设置对象?
    • 哦,在路由器的自述文件中有一个示例。同样的方法可用于调度程序接口,手动映射到工厂文件。我明天会写一个示例要点。互联网访问 atm 受限,抱歉。
    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多