Php 从教程中理解Zend DI示例
我无法理解这个例子:Php 从教程中理解Zend DI示例,php,dependency-injection,zend-framework2,Php,Dependency Injection,Zend Framework2,我无法理解这个例子: //在某个引导程序中 $di=new Zend\di\di(); $di->instanceManager()->setParameters('MyLibrary\DbAdapter',数组( 'username'=>$config->username, “密码”=>$config->password )); //每个控制器内部 $movieLister=$di->get('MyMovieApp\movieLister'); foreach($movieLister作为$m
//在某个引导程序中
$di=new Zend\di\di();
$di->instanceManager()->setParameters('MyLibrary\DbAdapter',数组(
'username'=>$config->username,
“密码”=>$config->password
));
//每个控制器内部
$movieLister=$di->get('MyMovieApp\movieLister');
foreach($movieLister作为$movie){
//迭代并显示$movie
}
源代码的另一部分(“每个控制器内部”)如何知道$di变量
这不是一个完整的例子吗?有人能告诉我如何在我的控制器中使用DI容器吗
教程页面:我认为你应该阅读这篇文章,以便对未来的研究有一个感性的认识: 您还应查看:
粗略地说,Zend/Mvc/应用程序中的ServiceManager做了大量的Di工作。该示例没有说明如何将
MyMovieApp\MovieLister
注入控制器,而不是调用Zend\Di\Di::get()
;后者假设DIC本身已注入控制器,这确实是一种反模式
老实说,这实际上是ZF2 mvc控制器当前默认实现的一个缺点,ZF2 mvc控制器中注入了ServiceManager
(主要出于性能原因,它取代了Di
)。这个问题已经过广泛讨论,很可能会在ZF3中讨论
目前,只需使用
ServiceManager
,忽略它被注入控制器的事实,并在具体的服务工厂中使用构造函数注入。这是目前在ZF2中进行IoC的最佳公认方法,它是可靠的,绝不是一个坏的做法。Zend Framework 2教程中的示例介绍了如何在整个框架环境之外使用特定组件,,让您更好地了解其功能
Zend开发人员的一个基本想法是创建一个独立库包(需要时它们之间只有一些依赖项),让您选择要使用框架的哪一部分。例如,您可以使用DI
类并在其他框架中使用它。它会很好用的。当他们说
内部控制器
他们的意思是
不一定是我们的控制员,你也可以是其他人
请注意,这只是ZF2的一个使用示例,但它实际上并不属于框架本身
因此,在任何地方获得
Di
对象的方式取决于您的应用程序体系结构。如果您考虑使用整个ZF2,那么您可能根本不会自己创建Di
对象Di
将由ServiceLocator
使用,它将允许您管理您的服务(对象、工厂等)。不要使用Zend\Di
使用ServiceManager是错误的做法,因为它是服务定位器,反模式。这不是真的。使用getServiceLocator()
是一种不好的做法。一般来说,服务经理是一种不错的做法。它基本上和您的DI相同,只是使用了另一个名称,而且更易于配置。我了解如何使用ServiceManager:)