php - ZF2 : Dependency injection done the proper way

标签 php class zend-framework dependency-injection zend-framework2

我是 ZendFramework 2 和整个 DI 理念的新手。

这是我需要实现的目标:

  1. 创建许多扩展单个 AbstractModel 的模型类
  2. 使用带有依赖项的 DI 提供 AbstractModel(在我的例子中是学说实体管理器)
  3. 在我需要的地方使用祖先类作为普通类

为了更好地解释 3. 让我们看一下这个例子:

class Ancestor extends Parent { }

在 Controller 中,或者理想情况下在任何地方:

$ancestor = new Ancestor();
$ancestor->doStuffWithEntityManager();

在初始化祖先时,它必须已经知道注入(inject)的资源。

这可能吗?如果不使用它的默认形式,我可以通过一些服务管理器等初始化祖先,只要我不需要指定每个祖先。我需要告诉 zend:将这个和那个注入(inject)到扩展/实现 X 的每个类中。

有什么想法吗?

P.S.:正如我所说,我是个新手,所以请指定我必须添加每段示例代码的配置/类文件。

最佳答案

在我的架构中,我按照以下方式进行操作。首先:我创建一个服务:

class Module 
{
    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'my-service-name'   => 'MyNamespace\Factory\MyServiceFactory'
            )
        );
    }
}

然后我创建 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;
    }
}

MyService 类甚至可以具有莫德依赖关系,在我的例子中,由于它们实现的接口(interface),这些依赖关系会自动注入(inject)。你可以看一个例子right here 。然后,特定的 EntityService 只需要一个定义存储库的函数,例如 this example here .

建议您阅读Rob Allens introduction to ServiceManager Configuration Keys 。特别阅读“初始化程序”部分,我想这是您主要关心的问题?

我希望这能解决您的问题。

关于php - ZF2 : Dependency injection done the proper way,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412698/

相关文章:

php - 将数组值插入数据库 laravel

php - 如何在 json 的帮助下使用 PHP,MySql 在 android 中验证用户登录凭据

c++ - "Read Access Violation: This was nullptr"以为我正确分配了它......?

php - zend 框架表单输入在服务器上无法正常工作

php - 以创造性的方式显示具有 35 列的表格

php - 使用 JavaScript 重定向到 PHP 脚本中的动态 href

java - 有没有办法在 JVM 中找到加载的类文件?

c++ - 为什么我不能使用嵌套在结构中的结构作为类型来在类模板中声明变量?

php - Zend_Framework - 在区域设置 'zh' 中找不到区域

php - 此适配器需要 PDO 扩展,但未加载扩展