问题标签 [pimple]

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 回答
207 浏览

php - Silex 2 升级后 WebTestCase 失败

我有以下用于控制器测试的基础 las:

在 Silex 1.3 上它工作得很好,但是在升级到 v2 之后它在标记线上失败了。一旦我发表评论 - 一切都很好。

UPD#1:我弄清楚它失败的原因:Cannot override frozen service "helper".我理解错误的含义,但不明白如何修复它。这是一个测试用例,所以我需要用对象的模拟/测试实现替换它,但不能..

0 投票
0 回答
618 浏览

php - 使用 Pimple 作为 DI 容器并使用 phpunit 模拟?

很长一段时间以来,我一直在爬网,但找不到任何问题的答案。我开始了一个新项目,我使用 Pimple 来管理 DI。当然,我想对我的课程进行单元测试,我需要一个 Mock。问题在于,使用经典的 DI 方法(将类传递给构造函数)很容易创建一个模拟并将其传递给类。

但是当我使用 Pimple 时,我不知道该怎么做,因为我没有在构造函数的对象中传递我需要的每个类。我传递了一个 Pimple Container 对象。

那么,当我想使用 mocks 时,我应该如何进行呢?我的意思是最佳实践。我想用我所有的模拟创建一个特定的疙瘩容器,并在单元测试中使用它而不是真实的,但我不确定是否有一种简单/更好的方法来做到这一点。感谢您的帮助

0 投票
1 回答
156 浏览

php - 接口与 PHP Pimple 冲突

我有一个扩展 Pimple\Container 的自定义类。在我看来,这个想法是包装用于访问已定义服务的丑陋方法(见下文):

这个想法很适合我想做的事情。然后我继续创建一个应用程序类,我选择继承而不是聚合不是出于任何特定原因,而不是看起来是逻辑。

现在的问题是当我有一个接受应用程序实例而不是 Pimple\Container 的 ServiceProvider 时,因为我创建了自己的定义此合同的 ServiceProviderInterface。

我现在意识到假设 Application 曾经并且仍然是一种 Container 并让它使用与父类不同类型的合同并不是一个好主意。但是,在我看来,从概念上讲,应用程序实例是某种容器,因为在其中我存储了一些键 => 值对数据。

我在想接口隔离原则会节省我的时间,但我不确定。

  1. 我对应用程序扩展 Pimple\Container 关系的假设是否违反了 Liskorv 替换原则?

  2. 有什么办法可以使用我自己的接口来注册我的服务提供者,因为我通过的任何服务都不符合 pimple\ServiceProvider 合同的错误?

简而言之,是否可以扩展 Pimple 的容器并忽略图书馆的服务提供者并使用定义相同合同但参数不同的您?

0 投票
0 回答
86 浏览

php - 如何在 Slim 3 中需要构造函数参数的疙瘩 DIC 中使用依赖项?

这个问题可能最好用一些代码片段来解释。首先我在 pimple 容器中创建工厂方法来创建或返回 Blah 对象:

然后在我的控制代码中:

但是,Blah 具有以下构造函数:

从容器中获取 Blah 时,有没有办法可以传入这些参数?许多 PHP 类具有仅在“运行时”真正相关的构造函数参数,而不是在引导应用程序时。

我敢肯定有一种简单的方法可以做到这一点,或者我做错了..

0 投票
1 回答
252 浏览

php - 使用 Slim 的依赖容器的正确方法

根据http://www.slimframework.com/docs/tutorial/first-app.html,首先创建 slim 对象,然后获取容器并为其添加服务。

但是,专门关于依赖容器的http://www.slimframework.com/docs/concepts/di.html要强大得多,并指出:

您不必提供依赖项容器。但是,如果这样做,则必须将容器实例注入 Slim 应用程序的构造函数。

$container = new \Slim\Container; $app = new \Slim\App($container);

一种方法比另一种更合适吗?

使用第二种方法时如何添加服务?

0 投票
1 回答
170 浏览

php - Pimple 的 ServiceProvider 没有在注册时获得选项

我通过 Pimple 与 Silex 及其依赖处理机制进行了大量合作。我正在尝试扩展整个依赖注入,以便能够通过 Pimple 的容器(依赖反转)解析类和/或实例。

我意识到那里有图书馆可以让我实现这一目标,但如果不重新发明轮子或类似的东西,还有什么更好的学习方法呢?

在我的测试文件中,到目前为止,我有两种方法,第一次测试以查看当正在检查的值不可用时是否引发异常。

这与尝试解析尚未注册的标识符时引发的异常相同。

最初,我在Container我的测试类的 setUp 方法中创建了实例,并发现这可能是一个问题,即使我知道 PHPUnit 会重新初始化每个测试方法的所有内容。

有了下面显示的测试结果,我想知道我做错了什么。

我的第二个测试函数(见下面的代码)上的行只返回我的配置中定义的数组,没什么特别的,因此可以手动组成数组,这并不重要,因为我这样做但无法通过它。

我查看了 Siliex 代码库以了解默认服务提供商如何处理选项,但似乎我遗漏了一些东西。有人可以指出我可能缺少的正确方向吗?

0 投票
1 回答
2017 浏览

php - 通过依赖注入传递静态类

如何通过依赖注入将静态类传递给对象?

例如Carbon使用静态方法:

我有依赖于 Carbon 的服务,目前我在依赖项中使用库而不注入它们。但是,这增加了耦合,我想通过 DI 传递它。

我有以下控制器:

我如何将碳传递给它?

0 投票
3 回答
530 浏览

php - PHP如何防止疙瘩DIC导致循环依赖的无限循环

在这个例子中,我有classA并且classB我正在使用疙瘩容器。

他们都相互依赖。但是,当使用 pimple DIC 进行设置时,以下代码会导致无限循环...

必须有一种方法可以在疙瘩中做到这一点,但我在文档中看不到它......任何想法如何防止无限循环?

0 投票
2 回答
640 浏览

php - 修改 Pimple/Slim 容器

我希望能够修改 Pimple 容器上的数组,但是,因为服务被 Pimple 冻结,这似乎是不可能的。

我已经extend()在容器上尝试了该方法,但是,由于我的数组不是对象,我无法修改它。

使用extend

有没有办法修改 Pimple 容器内的定义?$config目前,在实例化不太理想的容器之前,我通过引用传递了一个数组!

提前致谢

0 投票
1 回答
53 浏览

php - 如何在不是 Slim 3 中的类的 php 文件中使用依赖容器

我的数据库有这个依赖容器。

我可以像这样在我的控制器中使用它$conn = $this->db;来查询我的数据库并返回一个数组。

我正在尝试进行 ajax 调用以在视图中使用数据表。当我为我的 ajax 调用创建一个页面时,它只是一个 php 文件。不是一堂课。如何在这个 php 文件中使用 db 容器?

这是php文件。