问题标签 [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.

0 投票
3 回答
30677 浏览

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

我正在尝试使用路由创建带有查询字符串的 url,如下所示:

但是,这似乎不起作用(第二个助手实际上输出/users)。根据这个非官方的、过时的文档,曾经有一种方法可以通过附加/query到路由名称来做到这一点,但是这会产生一个找不到路由的异常。

这可以使用当前的 url 助手来完成吗?

0 投票
2 回答
523 浏览

zend-framework2 - Zend Framework 2 MVC 应用程序中的依赖管理

由于 ServiceLocatorAwareInterface 可能会从 ZF3 中的 AbstractController 中删除,因此应该通过构造函数或 setter 方法传递依赖项。

考虑到这一点,考虑用户或站点控制器的用例,其中包含注册、激活帐户、登录、注销等操作。这至少需要一个 UserService 和 2 个表单。添加更多相关操作(远程身份验证、帐户链接等),您最终会得到 4 或 5 个表单。

通过构造函数传递所有这些依赖关系充其量是混乱的,更重要的是,每个操作通常只需要一种形式。

您认为以下哪种技术更好,为什么?

  1. 为每个操作创建单独的控制器,以便每个控制器只需要一个表单(除了服务之外)。例如 RegistrationController、LoginController、LinkAccountController 等。

    • 这样你最终会得到很多控制器。
  2. 在控制器的工厂中,根据请求的操作提供不同的形式。

    • 控制器的构造依赖于这个工厂,更具体地说是请求环境(路由等)。您可以直接构造控制器(用于测试或其他),但是您需要确保依赖关系可用并抛出异常如果不。
  3. 使用事件管理器,在需要表单时触发控制器中的事件,并让事件处理程序按需提供依赖。

    • 此处描述了此技术。
    • 然后,您的控制器将依赖于 EventManager 而不是 ServiceLocator,这可能不会好多少。
  4. 将 FormElementManager 传递给控制器​​,并从中请求表单。

    • 最有可能不比SL本身更好。
  5. 直接在控制器内部构造表单。

    • 这如何影响可测试性?
    • 然后,同样的问题将适用于处理具有多个服务(而不是表单)的控制器。
  6. 其他?

也可以看看:

0 投票
1 回答
176 浏览

php - 在 Zend Framework 2 应用程序中使用 zend-servicemanager 版本 3

Zend Framework 将逐个组件升级到版本 3。最重要组件的新版本是稳定的:zend-servicemanager v3

问题是如何在“旧”ZF 应用程序版本 2中使用新的 zend-servicemanager v3 ?

有一个迁移指南解释了如何使用以及 zend-servicemanager v3 中的新功能,但没有针对新组件的某种安装指南。

0 投票
2 回答
4615 浏览

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 是这样的:

之前只有这个:

我已经尝试了一切,有人知道我该怎么做吗?

0 投票
1 回答
669 浏览

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 个服务......这是一个好习惯吗?这是正确的方法吗?这不会有糟糕的性能,因为在每个请求中都会启动我们在该请求期间根本不会使用的服务?

现在我允许每个服务/控制器处理自己的需求并在需要加载服务。

这样我就不必启动多个我不会使用的服务,也不需要知道服务依赖项来使用它们。我知道这不被接受为最佳实践,但代码很干净,我更愿意牺牲“最佳实践”以获得更好的性能。

感谢任何人对此的投入。

0 投票
4 回答
540 浏览

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(),只有它被实例化了。

一般来说,看起来很多实例都是在每次请求时通过工厂创建的,但大多数依赖项都没有使用。这是因为我的设计问题还是“通过构造函数进行依赖注入”的正常副作用行为?

0 投票
1 回答
2083 浏览

zend-framework2 - 如何使用 ZF3 设置延迟加载(任何地方都没有 ServiceLocator 模式)

我正在编写一个新的 ZF2 应用程序。我注意到 ZF3 已弃用“从任何地方”调用服务的 ServiceLocator 使用模式。我想为 ZF3 编写代码。

我能够将我的控制器设置为在构造函数时调用所有依赖项。但这意味着Doctrine在我需要它之前预先加载 ie 对象。

问题

如何设置它以便仅在我需要时才加载它?(延迟加载)。我知道 ZF3 将加载移至控制器构造,这使得如何加载即时加载内容并不明显。

旧代码

重构 ServiceLocator 模式后的当前代码

0 投票
2 回答
539 浏览

doctrine-orm - 教义、微服务和 zend 表达

我最近开始钻研zend expressive。我知道 zend 通常使用 zend db。在我的项目中,我正在开发微服务,并且想知道关于在 zend expressive 中使用关于微服务的学说的观点是什么。任何想法或意见将不胜感激。

0 投票
3 回答
2952 浏览

php - 如何在视图中获取匹配的路由名称 - Zend Expressive

我知道我可以通过路由名称生成 URL

但是我能得到相反方向的信息吗?从当前 URL/URI,我需要获取路由名称。

真实情况是:我有 layout.phtml 顶部菜单(html)在哪里。菜单中的当前链接需要用 css 类标记。所以,我需要的例子是:

我正在使用快速路线,但我对任何解决方案都很感兴趣。解决方案不必在视图文件中。

0 投票
4 回答
4131 浏览

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。真的?