gpt4 book ai didi

php - ZF3 中的服务管理器

转载 作者:可可西里 更新时间:2023-11-01 12:47:27 26 4
gpt4 key购买 nike

我知道这已在其他线程中广泛涉及,但我正在努力研究如何从 ZF3 Controller 中的 ZF2 Controller 复制 $this->getServiceLocator() 的效果。

我曾尝试使用我在此处和其他地方找到的各种其他答案和教程创建一个工厂,但最终都弄得一团糟,所以我粘贴了我开始时的代码希望有人能指出我正确的方向?

来自/module/Application/config/module.config.php

'controllers' => [
'factories' => [
Controller\IndexController::class => InvokableFactory::class,
],
],

来自/module/Application/src/Controller/IndexController.php

public function __construct() {
$this->objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$this->trust = new Trust;
}

最佳答案

You can not use $this->getServiceLocator() in controller any more

您应该再添加一个类 IndexControllerFactory ,您将在其中获取依赖项并将其注入(inject) IndexController

首先重构你的配置:

'controllers' => [
'factories' => [
Controller\IndexController::class => Controller\IndexControllerFactory::class,
],
],

然后创建 IndexControllerFactory.php

<?php

namespace ModuleName\Controller;

use ModuleName\Controller\IndexController;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;

class IndexControllerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container,$requestedName, array $options = null)
{
return new IndexController(
$container->get(\Doctrine\ORM\EntityManager::class)
);
}
}

最后重构您的 IndexController 以获取依赖项

public function __construct(\Doctrine\ORM\EntityManager $object) {
$this->objectManager = $object;
$this->trust = new Trust;
}

你应该查看官方文档zend-servicemanager玩一下……

关于php - ZF3 中的服务管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42168619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com