问题标签 [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.
migration - 将 ZF2 迁移到 ZF3:在插件管理器中找不到 Zend\Mvc\Router\Http\Segment
我正在将 ZF2 应用程序迁移到 ZF3。
首先我得到了错误:
添加'Zend\Router'
到modules
数组中application.config.php
解决了这个问题。但现在我遇到了另一个错误:
什么可能导致此错误以及如何解决?
zend-framework2 - 将 ZF2 迁移到 ZF3:热转换“realServiceLocator”?
在Factory
我的 Zend Framework 2 应用程序的类中,我经常使用这样的构造:
因此,为了访问“通用”服务,我首先检索了ServiceLocator
. 这种方法在Hydrator
s、Controller
s 和其他服务的工厂中是必要的,它们有自己的ServiceManager
s。因为对他们来说,输入ServiceLocator
是AbstractPluginManager
而不是Zend\ServiceManager\ServiceManager
.
现在我为我的工厂迈出了迁移的第一步,并替换了一些常见的东西:
如何适应$container->getServiceLocator()
ZF3?
migration - 如何从 Zend Framework 3 中的视图脚本访问服务?
我有一个自定义身份验证服务,在 ZF2 中我按如下方式访问它:
Application/view/layout/layout.phtml
现在Zend\ServiceManager#getServiceLocator()
已弃用。
如何在 ZF3 的视图脚本(或在这种情况下为布局中的具体)中获得可用的服务?
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 代码”,因为容器不会隐藏任何依赖关系。
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 实例。
当我尝试做同样的错误时:
或者
php - 如何将需要可变参数的类放入依赖注入容器中?
当我有一个需要提供的可变非静态参数时,如何使用依赖注入容器?
我在我的代码中想要的是:
我现在拥有的是这样的:
请注意,用户名可以更改并在运行时提供。
我似乎无法放入Staff
我的 DI 容器中,因为无法在那里指定可变参数。
我的问题是...
我正在使用基于工厂的容器,即Zend\ServiceManager\ServiceManager
.这是我用来隐藏实例化详细信息的工厂:
我在配置中设置容器的方式是这样的:
注意:即使参数是“变量”,我也希望Staff
是不可变的。也就是说,一旦它被创建,它就会保持这种状态。所以我并不特别希望setter
为用户名创建一个方法,因为这意味着该类是可变的,而实际上它不是。
你有什么建议?
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 中轻松覆盖服务/验证器等……我错过了什么吗?
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 类将根据我的要求创建对象。
这就是我创建服务的方式:
unit-testing - PHPUnit 测试中 Zend Framework 3 中的模拟视图助手
我想在 Zend Framework 3 中测试一个特定的控制器操作。因为我使用ZfcUser
(https://github.com/ZF-Commons/ZfcUser)和Bjyauthorize
(https://github.com/bjyoungblood/BjyAuthorize)我需要模拟一些查看助手。例如,我需要模拟isAllowed
视图助手并让它始终返回 true:
在我的view.phtml
(将通过打开/调度/myuri
uri 呈现)中,我调用 view helper $this->isAllowed('my-resource')
。
但是我在执行时收到了响应代码 500 并出现异常失败testViewAction()
:
我怎样才能以某种方式将我的isAllowed
模拟注入视图助手管理器,让测试用例(testViewAction
/ $this->dispatch()
)通过。
zend-framework2 - 如何在 ZendFramework 2 AbstractValidator 中包含 EntityManager
我有一个自定义验证器,扩展 Zend AbstractValidator。问题是,我想包括 Doctrine EntityManager,但我一直失败!我试图为我的验证器创建一个工厂,但它似乎不起作用。帮助!!我究竟做错了什么?
验证器:
$this->objectRepository 保持为空,而我期待内容。
工厂:
模块配置: