Zend Framework亮点简介

它只是一个框架,还是该框架体现了PHP社区的骄傲-可以说,它是一个努力工作的开发人员的重要组成部分? 随着分散的配置... PL的热爱对象,它具有良好的MVC,因此Zend框架是最好的PHP框架。


在这里,您将找不到该问题的答案,但将了解ServiceManager和ModuleManager。


跑傻瓜!


警告


  1. 该材料基于我在Zend Framework 2中寻找的内容,在某些地方甚至提到了版本1。 与其他版本相比,我认为这不会成为问题,因为考虑了基本点并且它们不太可能在全球范围内更改。
  2. 在推理和翻译(以及第1款)中,可能有重大错误,包括我的来源和原始来源。 将为所有链接提供链接,并且您自己的工作将带有注释[mine]
  3. 它针对的是那些像我一样对Google感到困惑的人。 不会部署博客,说明和互动。 但是会有两张照片和一只小猫。

目录内容


  • 条款
  • 设备框架
    • 总体结构和关系
    • 外挂程式
  • 可视化
    • 通讯技术
    • 原理图
  • 来自作者
    • 有用的链接
  • 红利

条款


来源 ,一点点[我的]


  • 应用 -最终产品,现场;
  • 模块是功能上完整的应用程序“块”,其代码可以包括模型,表示形式和控制器。 该模块扩展了Web应用程序的功能,并且只能在内部“运行”; 模块在modules部分的application.config.php中注册
  • ModuleManager-用于操作模块的容器;
  • 服务 -模块中的“机制”,用于模型,控制器,类型等之间的操纵。 服务在service_manager部分的module.config.php中注册。
  • ServiceManager-用于处理服务的容器。
  • ControllerManager-与服务和工厂配合使用以加载控制器( \Zend\ServiceManager\AbstractFactoryInterface\Zend\ServiceManager\ServiceManager )。 码头
  • EventManager-聚集一个或多个命名事件(事件)的事件处理程序(侦听器),并启动这些事件的处理的组件。
  • 插件是一类以某种方式扩展所有控制器功能的类。

设备框架


总体结构和关系


来源


Zend\Mvc\Application ,将通过Zend\Mvc\Service\ServiceManagerConfig创建和配置Zend\ServiceManager\ServiceManager对象。 ServiceManagerConfigconfig/application.config.php (或在创建Application时传递给Application其他一些应用程序配置)获取配置。 在Zend\Mvc\Service命名空间中表示的所有服务和工厂中, ServiceManagerConfig仅负责三个: SharedEventManagerEventManagerModuleManager


之后, Application检索ModuleManager 。 此时, ModuleManager通过ServiceManager配置Zend\Mvc\Service\ServiceListenerFactory提供的服务和工厂。 这种方法使我们能够简化主应用程序的配置,并为开发人员提供了从模块配置MVC系统各个部分的机会,从而覆盖了这些MVC服务中的任何默认配置。




ModuleManager ,以Zend\Mvc\Service\ModuleManagerFactory 。 这也许是MVC堆栈中最复杂的工厂。 ModuleManager希望通过键module_listener_optionsmodules部署ApplicationConfig服务。


它使用提取的module_listener_options创建Zend\ModuleManager\Listener\DefaultListenerAggregate的实例。 然后,它检查是否有一个名为ServiceListener ;否则,它将使用一个名为Zend\Mvc\Service\ServiceListenerFactory的工厂。 许多侦听器服务将添加到ServiceListener ,例如getServiceConfiggetControllerConfiggetControllerPluginConfiggetViewHelperConfig模块的getViewHelperConfig器。


然后, ModuleManager检索ModuleManager服务并附加上述侦听器。 通过将“ ServiceManager”参数设置为服务管理器对象,可以创建Zend\ModuleManager\ModuleEvent的实例。 最后,他创建Zend\ModuleManager\ModuleManager的实例,并实现EventManagerModuleEvent


[mine]代码更清晰的情况:


 <?php namespace Zend\Mvc\Service; use Zend\ModuleManager\Listener\DefaultListenerAggregate; use Zend\ModuleManager\Listener\ListenerOptions; use Zend\ModuleManager\ModuleEvent; use Zend\ModuleManager\ModuleManager; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class ModuleManagerFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { if (!$serviceLocator->has('ServiceListener')) { $serviceLocator->setFactory('ServiceListener', 'Zend\Mvc\Service\ServiceListenerFactory'); } $configuration = $serviceLocator->get('ApplicationConfig'); $listenerOptions = new ListenerOptions($configuration['module_listener_options']); $defaultListeners = new DefaultListenerAggregate($listenerOptions); $serviceListener = $serviceLocator->get('ServiceListener'); $serviceListener->addServiceManager( $serviceLocator, 'service_manager', 'Zend\ModuleManager\Feature\ServiceProviderInterface', 'getServiceConfig' ); //        $events = $serviceLocator->get('EventManager'); $events->attach($defaultListeners); $events->attach($serviceListener); $moduleEvent = new ModuleEvent; $moduleEvent->setParam('ServiceManager', $serviceLocator); $moduleManager = new ModuleManager($configuration['modules'], $events); $moduleManager->setEvent($moduleEvent); return $moduleManager; } } 

外挂程式


来源


控制器体系结构包括一个插件系统,该系统可让您添加自己的代码,当在控制器寿命期内发生某些事件时,将调用该代码。 前端控制器使用插件代理作为用户插件的注册表,插件代理还在通过前端控制器注册的每个插件中提供事件方法调用。


事件方法在抽象类Zend_Controller_Plugin_Abstract中定义,所有用户插件都必须从中继承


可视化


[我的]


  • 除非另有说明,否则从上到下阅读。
  • 箭头线指示所包含的内容。
  • 没有箭头的细线表示连接了什么。
  • 没有箭头的粗线表示要进行哪些控制。

通讯技术


沟通交流


方案


方案


来自作者


细心的读者注意到,本文以Toaster的链接开头,在该链接中询问有关ServiceManager和ModuleManager之间区别的问题,文章的正文以它们开头。 巧合吗? 我不这么认为。 事实是,Habr是我开始熟悉框架基础知识的第一个地方, 出版物引起了混乱,在混乱的地方从文档中重新创建了一个博客,并附有文章作者的评论。 正是由于缺少对ModuleManager的描述,导致我做出了错误的推理(模块已在ServiceManager中注册),这导致撰写本文。


有用的链接


我不想参与复制粘贴并在一个主题上增加了6个部分,所以我在ZF上附上了我的书签列表,并附上注释:


小心扰流板!

博客


在Habr的三篇文章中


  • https://habr.com/post/192522/
  • 在ZendSkeletonApplication上开发简单博客的文档的免费翻译。 它讨论了配置,ServiceManager(或我仍然不理解的ModuleManager)和连接第三方库。

原始博客文档



赛事经理


初步审查



详细分析



服务经理


快速上手



详细分析



模块管理器


该文件



我希望短暂的游览不会太长并且有用。 当然,您接受哈布规则和俄罗斯联邦现行法律允许的编辑,建议,批评和其他行动。




我们应得的奖金:


小猫咪


(= ^Ω・ ^ =)

Source: https://habr.com/ru/post/zh-CN426303/


All Articles