php - 如何在 zend framework 3 的 Controller 中获取服务管理器实例?

标签 php zend-framework zend-framework3 zend-servicemanager

我正在尝试在我的 Controller 中获取一个 ServiceManager 实例以使用 Db\Adapter 的工厂。

我添加到 module/Application/config/module.config.php:

'service_manager' => [
    'factories' => [
        Adapter::class => AdapterServiceFactory::class,
    ],
],

我在 config/autoload/local.php 添加了以下几行:

'db' => [
    'driver' => 'Mysqli',
    'database' => 'mydb',
    'username' => 'myuser',
    'password' => 'mypassword',
]

现在我想访问我的模块/Application/src/Controller/IndexController.php 中的ServiceManager。我该怎么做?

我尝试了 $sm = $this->getPluginManager(); 但没有成功。如果我使用 PluginManager 运行 $serviceManager->get(Adapter::class) 它会给我一个错误:

Too few arguments to function Zend\Db\Adapter\Adapter::__construct(), 0 passed in (...)\vendor\zendframework\zend-servicemanager\src\Factory\InvokableFactory.php on line 30 and at least 1 expected

我该怎么做才能获得一个 ServiceManager 来获取我的 Adapter 对象?


我改变了 Controller 工厂

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

'controllers' => [
    'factories' => [
        Controller\IndexController::class => function(ContainerInterface $serviceManager) {
            return new Controller\IndexController($serviceManager);
        },
    ],
],

我还向 module.config.php 添加了一个 getServiceConfig() 方法,并向接收 ServiceManager 的 IndexController 添加了一个构造函数。现在我可以访问 Controller 内部了。

但我现在的问题是:是否有更好、更“类似 zend”的方法来实现这一目标?

最佳答案

感谢 SO 的相关主题,我终于找到了答案。 ServiceManager in ZF3

这似乎是通过使用 Controller Factories 完成的,几乎就像我所做的那样。

关于php - 如何在 zend framework 3 的 Controller 中获取服务管理器实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42594473/

相关文章:

php - 如何在 ZF2/ZF3 url view helper 中添加查询参数

php - 获取图像尺寸

php - 我如何让 SublimeCodeIntel 跳转到适用于 php 的符号

iis - 处理同一个域下的多个应用程序

php - 带有 zend 框架的应用程序只显示 index.php,不管 url 是什么

php - 实体公共(public)字段的学说继承

php - ZF3 中的服务管理器

php - 安装后 Shopware Slim 应用程序错误

php - Laravel Eloquent 获取按天分组的结果

php - Zend 领域驱动设计