Ton*_*nov 2 php dependency-injection zend-framework class zend-framework2
我是ZendFramework 2和整个DI想法的新手.
这是我需要实现的:
为了更好地解释3.让我们看看这个例子:
class Ancestor extends Parent { }
Run Code Online (Sandbox Code Playgroud)
在控制器中,或理想情况下在任何地方:
$ancestor = new Ancestor();
$ancestor->doStuffWithEntityManager();
Run Code Online (Sandbox Code Playgroud)
Uppon初始化祖先它必须已经知道注入的资源.
这甚至可能吗?如果不使用它的默认形式我可以通过一些服务管理器等初始化祖先,只要我不需要指定每个祖先.我需要告诉zend:将这个和那个注入到扩展/实现X的每个类中.
有任何想法吗?
PS:正如我所说我是新手,所以请指定我必须添加每个示例代码的配置/类文件.
在我的架构中,我会像下面这样做.第一:我创建一个服务:
class Module
{
public function getServiceConfig()
{
return array(
'factories' => array(
'my-service-name' => 'MyNamespace\Factory\MyServiceFactory'
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建ServiceFactory.这将是所有依赖关系将被处理的点.
<?php
namespace MyNamespace\Factory;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\FactoryInterface;
use MyNamespace\Service\SomeService;
class MyServiceFactory implements FactoryInterface
{
/**
* Create service
*
* @param ServiceLocatorInterface $serviceLocator
* @return \MyNamespace\Service\SomeService
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
$service = new SomeService();
$service->setEntityManager($serviceLocator->get('Doctrine\ORM\EntityManager'));
return $service;
}
}
Run Code Online (Sandbox Code Playgroud)
MyService-Class甚至可以具有morde依赖性,在我的情况下由于它们实现的接口而自动注入.你可以在这里看到一个例子.然后,特定的EntityService只需要一个定义存储库的函数,就像这个例子一样.
您可能还会被建议阅读Rob Allens对ServiceManager配置密钥的介绍.特别是关于'初始化者'部分的内容,我想这是您的主要问题?
我希望这能涵盖你的问题.
| 归档时间: |
|
| 查看次数: |
5021 次 |
| 最近记录: |