mikemix/mxdi-module

此包已被弃用且不再维护。未建议替代包。

使用注解/YAML配置ZF2中的依赖注入

3.1.5 2016-03-21 14:06 UTC

This package is auto-updated.

Last update: 2020-05-10 21:21:14 UTC


README

Build Status Build Status Scrutinizer Code Quality Code Coverage Dependency Status Latest Stable Version Total Downloads License

使用注解/yaml/xml配置Zend Framework 2中的依赖注入。

基于 Symfony2 项目的 JMSDiExtraBundle 的想法。

  1. 安装
  2. 更改映射驱动程序
  3. 重要注意事项
  4. 缓存
  5. 调试
  6. 控制台命令

安装

  1. 使用Composer安装: composer require mikemix/mxdi-module:~3.0(适用于 语义版本控制 的规则)。

  2. 通过ZF2配置文件中的 application.config.php 下的 modules 键启用模块

    return [
        //
        //
        'modules' => [
            'mxdiModule',
            // other modules
        ],
        //
        //
    ];

    这将启用模块并在ZF2的服务管理器中注册抽象工厂。

  3. 如果您想覆盖默认的映射驱动程序,请复制全局配置文件 cp vendor/mikemix/mxdi-module/resources/mxdimodule.global.php.dist config/autoload/mxdimodule.global.php

  4. 如果您想覆盖其他设置,如缓存等,请复制本地配置文件 cp vendor/mikemix/mxdi-module/resources/mxdimodule.local.php.dist config/autoload/mxdimodule.local.php

更改映射驱动程序

默认映射驱动程序是 AnnotationExtractor,作为模块映射信息的来源。但是,您可以将其更改为其他选项。可用的提取器包括

  • AnnotationExtractor(默认)使用类内部的注解。有关注解参考和示例,请参阅注解文档
  • YamlExtractor 使用 yml 文件。有关示例,请参阅YAML 文档。
  • XmlExtractor 使用 xml 文件。有关示例,请参阅XML 文档。

选择注解驱动程序、YAML 或 XML 驱动程序之间没有区别,因为最终的映射信息最终被转换为 纯PHP 并存储在 缓存中

重要注意事项

记住,请求的服务不应该在 服务管理器 中注册。如果您将其注册为工厂或可调用的,则它将不会通过抽象工厂进行,也不会被注入。顺便说一句,这允许您为所提及的服务创建自定义工厂。

为了加快定位时间,您可以通过 DiFactory 可调用请求服务,例如

/** @var \mxdiModule\Service\DiFactory @factory */ 
$factory = $this->getServiceLocator()->get(\mxdiModule\Service\DiFactory::class);

/** @var \YourApplication\Service\SomeService $service */
$service = $factory(\YourApplication\Service\SomeService::class);

缓存

解析映射源非常耗时。您应该在生产服务器上 启用 缓存。

您可以使用任何自定义或现有的 ZF2 缓存适配器轻松设置缓存。在 config/autoload/mxdimodule.local.php 中覆盖 cache_adaptercache_options 键以满足您的需求。您可以在 ZF2 文档网站 上找到有关可用内置适配器的更多信息。

调试

如果您遇到 ServiceNotCreated 异常,很可能是因为您的一个注入没有在 ZF2 的服务管理器中注册。在异常堆栈中,您将看到更多详细信息。例如,查找 CannotGetValue 异常。

控制台命令

  • 清除生成的代理文件:php public/index.php mxdimodule proxy clear

    从代理目录清除所有生成的代理文件

  • 清除注解解析缓存:php public/index.php mxdimodule cache clear [<fqcn>]

    刷新整个缓存或仅刷新给定服务的缓存