mikemix / mxdi-module
使用注解/YAML配置ZF2中的依赖注入
Requires
- php: >=5.5.0
- doctrine/annotations: ~1.2.4
- ocramius/proxy-manager: ~1.0.0
- symfony/yaml: ~2.7.1
- zendframework/zend-cache: ~2.5
- zendframework/zend-console: ~2.5
- zendframework/zend-modulemanager: ~2.5
- zendframework/zend-mvc: ~2.5
- zendframework/zend-servicemanager: ~2.5
README
使用注解/yaml/xml配置Zend Framework 2中的依赖注入。
基于 Symfony2 项目的 JMSDiExtraBundle 的想法。
安装
-
使用Composer安装:
composer require mikemix/mxdi-module:~3.0(适用于 语义版本控制 的规则)。 -
通过ZF2配置文件中的
application.config.php下的modules键启用模块return [ // // 'modules' => [ 'mxdiModule', // other modules ], // // ];
这将启用模块并在ZF2的服务管理器中注册抽象工厂。
-
如果您想覆盖默认的映射驱动程序,请复制全局配置文件
cp vendor/mikemix/mxdi-module/resources/mxdimodule.global.php.dist config/autoload/mxdimodule.global.php -
如果您想覆盖其他设置,如缓存等,请复制本地配置文件
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_adapter 和 cache_options 键以满足您的需求。您可以在 ZF2 文档网站 上找到有关可用内置适配器的更多信息。
调试
如果您遇到 ServiceNotCreated 异常,很可能是因为您的一个注入没有在 ZF2 的服务管理器中注册。在异常堆栈中,您将看到更多详细信息。例如,查找 CannotGetValue 异常。
控制台命令
-
清除生成的代理文件:
php public/index.php mxdimodule proxy clear从代理目录清除所有生成的代理文件
-
清除注解解析缓存:
php public/index.php mxdimodule cache clear [<fqcn>]刷新整个缓存或仅刷新给定服务的缓存