问题标签 [zend-servicemanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
595 浏览

migration - 将 ZF2 迁移到 ZF3:在插件管理器中找不到 Zend\Mvc\Router\Http\Segment

我正在将 ZF2 应用程序迁移到 ZF3。

首先我得到了错误:

添加'Zend\Router'modules数组中application.config.php解决了这个问题。但现在我遇到了另一个错误:

什么可能导致此错误以及如何解决?

0 投票
1 回答
290 浏览

zend-framework2 - 将 ZF2 迁移到 ZF3:热转换“realServiceLocator”?

Factory我的 Zend Framework 2 应用程序的类中,我经常使用这样的构造:

因此,为了访问“通用”服务,我首先检索了ServiceLocator. 这种方法在Hydrators、Controllers 和其他服务的工厂中是必要的,它们有自己的ServiceManagers。因为对他们来说,输入ServiceLocatorAbstractPluginManager而不是Zend\ServiceManager\ServiceManager.

现在我为我的工厂迈出了迁移的第一步,并替换了一些常见的东西:

如何适应$container->getServiceLocator()ZF3?

0 投票
2 回答
548 浏览

migration - 如何从 Zend Framework 3 中的视图脚本访问服务?

我有一个自定义身份验证服务,在 ZF2 中我按如下方式访问它:

Application/view/layout/layout.phtml

现在Zend\ServiceManager#getServiceLocator()已弃用。

如何在 ZF3 的视图脚本(或在这种情况下为布局中的具体)中获得可用的服务?

0 投票
0 回答
187 浏览

php - PHP 框架使用依赖注入容器进行对象实例化的原因是什么?

我将专注于 Zend 框架,因为我最了解它,但这当然适用于其他使用控制反转容器的 PHP 框架中的其他类似机制。

在 Zend Framework 的情况下,通过一些重构/操作,完全可以使用容器。

工作示例

$container 查看文档,目前 Zend Framework 正在使用(取自此处)做这样的事情:

左侧=>包含“keys”,可以是任何字符串,包括类定义字符串。右侧是类名的回调或 FQDN。在上面的例子中,它是一个匿名的 PHP 函数,它就像一个工厂来实例化一个新实体,使用$container通过框架调用传递给该函数的 DiC。

为什么不移除容器并执行以下操作:

如果裸函数很麻烦,上面可以转换为类。

在上面我删除$container并用硬编码函数调用替换了任何容器使用,new因为没有提供参数

由于factories数组Zend 容器配置的一部分,要真正将其分解出来,我必须Model\AlbumTable::class用工厂调用替换任何其他容器调用实例,以便返回Model\AlbumTable实例。完成后,我可以有一个无容器的 Zend 实现,直接调用工厂,而不是通过显式定义所有依赖项的容器调用它们。

问题的精神是……为什么要使用容器,它到底提供了什么,为什么不使用“真正的 PHP 代码”,因为容器不会隐藏任何依赖关系。

0 投票
2 回答
1392 浏览

php - ZF3 Translator Remote Loader Factory 无法解析服务


我在将 MVCTranslator 与存储在数据库中的翻译一起使用时遇到问题。

我将翻译配置为使用 remote_translation,但我无法为我的自定义加载程序创建工厂。我的文件如下所示:

模块.config.php

模块.php

Translator\DatabaseTranslationLoader.php

工厂\DatabaseTranslationLoaderFactory.php

使用此配置,当我尝试在 DatabaseTranslationLoaderFactory 中检索数据库适配器时,会收到来自服务管理器的异常:

无法将服务“Zend\Db\Adapter\Adapter”解析为工厂;你确定你在配置过程中提供了它吗?

看起来工厂有一个空容器(一个新的 ServiceManager 实例?)。

我究竟做错了什么?有谁知道如何做到这一点?我将不胜感激任何建议。

编辑:

如上所述,看起来这是 DatabaseTranslationLoaderFactory 中的一个新 serviceMenager 实例。
当我尝试做同样的错误时:

或者

0 投票
1 回答
740 浏览

php - 如何将需要可变参数的类放入依赖注入容器中?

当我有一个需要提供的可变非静态参数时,如何使用依赖注入容器?

我在我的代码中想要的是:

我现在拥有的是这样的:

请注意,用户名可以更改并在运行时提供。

我似乎无法放入Staff我的 DI 容器中,因为无法在那里指定可变参数。

我的问题是...

我正在使用基于工厂的容器,即Zend\ServiceManager\ServiceManager.这是我用来隐藏实例化详细信息的工厂:

我在配置中设置容器的方式是这样的:

注意:即使参数是“变量”,我也希望Staff是不可变的。也就是说,一旦它被创建,它就会保持这种状态。所以我并不特别希望setter为用户名创建一个方法,因为这意味着该类是可变的,而实际上它不是。

你有什么建议?

0 投票
1 回答
497 浏览

validation - Zendframework 3 - 覆盖 CSRF 验证器

我尝试从 ZF2 迁移到 ZF3 但很多viewHelpers 和验证器不起作用。但只有那些覆盖 ZendFrameworks查看助手 /验证器不起作用...

我希望 fe 覆盖 CSRF 验证器以默认允许更高的超时。

我有以下应用程序配置:

基本模块的模块配置:

基础\验证器\Csrf:

编辑:添加了自动加载配置

作曲家.json:

编辑 2: \Zend\Form\Element\Csrf 实现中的可能错误?

有趣的是,CsrfValidator 只是在这里直接实例化......

Stacktrace(\Zend\Validator\Csrf __construct() 中的断点) 堆栈跟踪

StaticPage是我的另一个模块。

我还使用 xdebug 进行了调试,并在 CsrfFactory(return 语句)中设置了一个断点,以查看它是否被使用(但不是)。我以为我可以在 ZF3 中轻松覆盖服务/验证器等……我错过了什么吗?

0 投票
1 回答
186 浏览

php - 是否可以将 Zend Service Manager 与自定义代码库一起使用?

我想在我的自定义代码库中使用 Zend Service Manager。它不是基于 Zend MVC 构建的,而是我只使用一些 Zend 包,如 Zend Console 和 Zend Config。

我想使用 Zend Service Manager 的功能,只要代码进入我的 Core 类,我想初始化 DB 和 Config 对象并将它们作为服务保存在 Zend Service Manager 中。现在我想在我的代码库中使用这个服务。

有没有办法在每个类的构造函数中不传递服务管理器来使用它?此外,我的其他类不会从这个 Core 类扩展,而是这个 Core 类将根据我的要求创建对象。

这就是我创建服务的方式:

0 投票
2 回答
797 浏览

unit-testing - PHPUnit 测试中 Zend Framework 3 中的模拟视图助手

我想在 Zend Framework 3 中测试一个特定的控制器操作。因为我使用ZfcUserhttps://github.com/ZF-Commons/ZfcUser)和Bjyauthorizehttps://github.com/bjyoungblood/BjyAuthorize)我需要模拟一些查看助手。例如,我需要模拟isAllowed视图助手并让它始终返回 true:

在我的view.phtml(将通过打开/调度/myuriuri 呈现)中,我调用 view helper $this->isAllowed('my-resource')

但是我在执行时收到了响应代码 500 并出现异常失败testViewAction()

我怎样才能以某种方式将我的isAllowed模拟注入视图助手管理器,让测试用例(testViewAction/ $this->dispatch())通过。

0 投票
1 回答
86 浏览

zend-framework2 - 如何在 ZendFramework 2 AbstractValidator 中包含 EntityManager

我有一个自定义验证器,扩展 Zend AbstractValidator。问题是,我想包括 Doctrine EntityManager,但我一直失败!我试图为我的验证器创建一个工厂,但它似乎不起作用。帮助!!我究竟做错了什么?

验证器:

$this->objectRepository 保持为空,而我期待内容。

工厂:

模块配置: