问题标签 [zend-framework3]
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.
php - 如何在 ZF2 / ZF3 url view helper 中添加查询参数
我正在尝试使用路由创建带有查询字符串的 url,如下所示:
但是,这似乎不起作用(第二个助手实际上输出/users
)。根据这个非官方的、过时的文档,曾经有一种方法可以通过附加/query
到路由名称来做到这一点,但是这会产生一个找不到路由的异常。
这可以使用当前的 url 助手来完成吗?
zend-framework2 - Zend Framework 2 MVC 应用程序中的依赖管理
由于 ServiceLocatorAwareInterface 可能会从 ZF3 中的 AbstractController 中删除,因此应该通过构造函数或 setter 方法传递依赖项。
考虑到这一点,考虑用户或站点控制器的用例,其中包含注册、激活帐户、登录、注销等操作。这至少需要一个 UserService 和 2 个表单。添加更多相关操作(远程身份验证、帐户链接等),您最终会得到 4 或 5 个表单。
通过构造函数传递所有这些依赖关系充其量是混乱的,更重要的是,每个操作通常只需要一种形式。
您认为以下哪种技术更好,为什么?
为每个操作创建单独的控制器,以便每个控制器只需要一个表单(除了服务之外)。例如 RegistrationController、LoginController、LinkAccountController 等。
- 这样你最终会得到很多控制器。
在控制器的工厂中,根据请求的操作提供不同的形式。
- 控制器的构造依赖于这个工厂,更具体地说是请求环境(路由等)。您可以直接构造控制器(用于测试或其他),但是您需要确保依赖关系可用并抛出异常如果不。
使用事件管理器,在需要表单时触发控制器中的事件,并让事件处理程序按需提供依赖。
- 此处描述了此技术。
- 然后,您的控制器将依赖于 EventManager 而不是 ServiceLocator,这可能不会好多少。
将 FormElementManager 传递给控制器,并从中请求表单。
- 最有可能不比SL本身更好。
直接在控制器内部构造表单。
- 这如何影响可测试性?
- 然后,同样的问题将适用于处理具有多个服务(而不是表单)的控制器。
其他?
也可以看看:
php - 在 Zend Framework 2 应用程序中使用 zend-servicemanager 版本 3
Zend Framework 将逐个组件升级到版本 3。最重要组件的新版本是稳定的:zend-servicemanager v3
问题是如何在“旧”ZF 应用程序版本 2中使用新的 zend-servicemanager v3 ?
有一个迁移指南解释了如何使用以及 zend-servicemanager v3 中的新功能,但没有针对新组件的某种安装指南。
php - 已弃用:在功能系统中检索服务定位器 - ZF2
我正在开发一个 ZF2 系统,它运行得很好,但是在我在其他计算机上克隆存储库后,出现了这个不推荐使用的错误:
您正在从类 Module\Controller\Controller 中检索服务定位器。请注意,ServiceLocatorAwareInterface 已弃用,将在 3.0 版中与 ServiceLocatorAwareInitializer 一起删除。您将需要更新您的类以在创建时接受所有依赖项,通过构造函数参数或设置器,并使用工厂执行注入。在 /home/path/project/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php 第 258 行
作曲家.json:
当我在控制器中检索服务时出现错误(扩展 Zend\Mvc\Controller\AbstractActionController):
在 Zend 核心中 Zend\Mvc\Controller\AbstractController 是这样的:
之前只有这个:
我已经尝试了一切,有人知道我该怎么做吗?
php - ZF2 已弃用:ServiceManagerAwareInterface
今天我更新了我的项目,我收到了这个警告:
已弃用:ServiceManagerAwareInterface 已弃用,将在 3.0 版中与 ServiceManagerAwareInitializer 一起删除。请更新您的 X 类以删除实现,并开始通过工厂注入您的依赖项
我有一些Base
实现这些基类的主类ServiceManagerAwareInterface
和多个类。
那么为这些类中的每一个创建额外的工厂类是一个好习惯吗?还是为每个模块使用1 个 AbstractFactory并在其中启动类更好?
使用 AbstractFactory 影响性能的剂量?
在许多类中注入单个(或两个)共享依赖项的最佳实践是什么?
更新:即使我接受了@AlexP 的回答,但我对提供依赖项抛出构造函数有些担忧。想象一下这个场景:我有一个控制器,有几个动作,免得说ActionA需要ServiceZ,ActionB需要ServiceY和ServiceX,而ServiceX也依赖于ServiceM和ServiceN。现在每次我调用 ActionA 时,我的控制器都会启动所有这些服务,但 ActionA 只需要 1 个服务,而我的控制器加载了 5 个服务......这是一个好习惯吗?这是正确的方法吗?这不会有糟糕的性能,因为在每个请求中都会启动我们在该请求期间根本不会使用的服务?
现在我允许每个服务/控制器处理自己的需求并在需要时加载服务。
这样我就不必启动多个我不会使用的服务,也不需要知道服务依赖项来使用它们。我知道这不被接受为最佳实践,但代码很干净,我更愿意牺牲“最佳实践”以获得更好的性能。
感谢任何人对此的投入。
php - 没有 serviceLocator->get() 的 ZF2 中依赖注入的新方法效率更低吗?
由于zend-mvc的2.7.0 版本已ServiceLocatorAwareInterface
被弃用,因此$this->serviceLocator->get()
控制器内部的调用也是如此。
这就是为什么几天前我对我的所有模块进行了巨大的重构,以通过使用工厂的构造函数注入所需的服务/对象。
当然,我理解为什么这是更好/更清洁的做事方式,因为依赖关系现在更加明显。但另一方面:
这会导致大量开销和更多从未使用过的类实例,不是吗?
让我们看一个例子:
因为我所有的控制器都有依赖关系,所以我为它们创建了工厂。
客户控制器工厂.php
客户控制器.php
模块.config.php
SyncRestClientServiceFactory.php
SyncRestService 是一个复杂的服务类,它查询我们系统的一些内部服务器。它有很多依赖关系,并且总是在有请求到达 CustomerController 时创建。但是这个同步服务只syncAction()
在 CustomerController内部使用!在我只是$this->serviceLocator->get('Admin\Service\SyncRestClientService')
在内部使用之前syncAction()
,只有它被实例化了。
一般来说,看起来很多实例都是在每次请求时通过工厂创建的,但大多数依赖项都没有使用。这是因为我的设计问题还是“通过构造函数进行依赖注入”的正常副作用行为?
zend-framework2 - 如何使用 ZF3 设置延迟加载(任何地方都没有 ServiceLocator 模式)
我正在编写一个新的 ZF2 应用程序。我注意到 ZF3 已弃用“从任何地方”调用服务的 ServiceLocator 使用模式。我想为 ZF3 编写代码。
我能够将我的控制器设置为在构造函数时调用所有依赖项。但这意味着Doctrine
在我需要它之前预先加载 ie 对象。
问题
如何设置它以便仅在我需要时才加载它?(延迟加载)。我知道 ZF3 将加载移至控制器构造,这使得如何加载即时加载内容并不明显。
旧代码
重构 ServiceLocator 模式后的当前代码
doctrine-orm - 教义、微服务和 zend 表达
我最近开始钻研zend expressive。我知道 zend 通常使用 zend db。在我的项目中,我正在开发微服务,并且想知道关于在 zend expressive 中使用关于微服务的学说的观点是什么。任何想法或意见将不胜感激。
php - 如何在视图中获取匹配的路由名称 - Zend Expressive
我知道我可以通过路由名称生成 URL
但是我能得到相反方向的信息吗?从当前 URL/URI,我需要获取路由名称。
真实情况是:我有 layout.phtml 顶部菜单(html)在哪里。菜单中的当前链接需要用 css 类标记。所以,我需要的例子是:
我正在使用快速路线,但我对任何解决方案都很感兴趣。解决方案不必在视图文件中。
doctrine-orm - 是否可以使用 ZF3 骨架应用程序安装教义 orm 模块?
我对 php composer 的了解只是基本的,但是……我已经下载并安装了 Zend Framework 3.0.0dev MVC 框架应用程序,并想知道我是否可以安装Doctrine ORM 模块。composer require doctrine/doctrine-orm-module
抱怨
所以我尝试在 composer.json 中将 zendframework/zend-mvc 降级到 2.7.9,然后再试一次:
我怀疑我不能让作曲家高兴的原因是这无法做到——即,教义-orm-module(还)不兼容ZF3。真的?