问题标签 [php-di]

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

php - PHP-DI 没有注入所需的类

我根据做依赖注入使用php-di。请求首先到达配置 php-di 的 route.php 文件(例如在需要AccountServiceIAccountService使用),然后要求容器创建适当的控制器。route.php 的源代码如下:

现在提到这一行在$controller = $container->get('AccountController');哪里AccountController被选中。在此之后我得到了错误。

的源代码AccountController

似乎DI没有注入AccountService,错误如下:

注意:未定义变量:第 13 行 /opt/lampp/htdocs/UMTest/controllers/account_controller.php 中的 accountService

注意:未定义的属性:AccountController::$ in /opt/lampp/htdocs/UMTest/controllers/account_controller.php 第 13 行

致命错误:未捕获的错误:在 /opt/lampp/htdocs/UMTest/controllers/account_controller.php:13 中调用成员函数 login() 堆栈跟踪:#0 /opt/lampp/htdocs/UMTest/routes.php (40): AccountController->login() #1 /opt/lampp/htdocs/UMTest/routes.php(54): call(Object(AccountController), 'login') #2 /opt/lampp/htdocs/UMTest/ views/layout.php(10): require_once('/opt/lampp/htdo...') #3 /opt/lampp/htdocs/UMTest/index.php(36): require_once('/opt/lampp/htdo ...') #4 {main} 在第 13 行的 /opt/lampp/htdocs/UMTest/controllers/account_controller.php 中抛出

我的错误在哪里?

0 投票
2 回答
1305 浏览

php - PHP-DI 按名称注入参数

我正在一起使用 php-di 和 Doctrine。要使用 Doctrine,有一个bootstrap.php构造$entityManager对象的文件。该$entityManager对象是在该文件中全局定义的,因此要在我的类中使用它,我必须注入它。

例如假设下面的类:

但是类型的$entityManager定义不明确,或者当我调用echo gettype($entityManager);它时会打印"object"结果。所以我想我需要通过它的名字而不是它的类型来注入这个参数。我的意思是这样的:

但这不起作用。解决方案和最佳方法是什么?

0 投票
1 回答
1261 浏览

php - PHP-DI 无法使用构造函数参数注入创建的类

我尝试用 PHP-DI 做一个项目,但我遇到了问题。

这是跟踪:

痕迹

这是代码:

容器类:

配置类:

数据库类:

我可以$container->get('Configuration')毫无问题地访问它并且它有效。

但是在创建 Database 类时,我认为 PHP-DI 尝试重新创建 Configuration 的实例,但我不知道为什么,因为这里已经有一个单例实例。

感谢您的帮助!

0 投票
1 回答
217 浏览

php - Php-Di 注释性能

谁能解释我在 Php-Di 的性能方面什么更好?使用annotationsplain constructor params?注释 = 要编写的字符更少,但这是一个好习惯吗?

对比:

0 投票
1 回答
165 浏览

php - php-di 中的多个构造函数参数注入

0 投票
1 回答
487 浏览

php - PHP-DI:路由和可选段

我将 PHP-DI 与 Slim 框架一起使用。在 Slim 中,您可以通过在其周围放置括号来使路线段成为可选。现在我在省略可选路由段时设置了 PHP-DI,我收到此错误:

这是我的路线:

我在 PHP-DI 文档中找不到任何关于可选部分的内容,只是如何获取命名段的值。

0 投票
1 回答
229 浏览

php - 引用定义为多维数组的 PHP-DI 定义

如果我有如下定义的数组,则RouteCollector在其他对象中注入实例将完美执行:

router.options但是,如果我将定义定义为数组,有没有办法达到相同的结果?例如,我如何在RouteCollector::class定义中引用它的元素?

请注意,这不是将相应的完全限定的类名(如\FastRoute\RouteParser\Std)作为参数传递给constructorParameter方法。一般来说,它是关于引用数组中定义的配置选项。

谢谢您的支持。

0 投票
1 回答
323 浏览

php - PHP-DI 5:缓存值和定义

我正在使用 PHP-DI 5 依赖注入容器,并且我已经阅读了有关定义缓存的文档。虽然我还不确定这方面......所以我想问你:

1)如果我直接将一个对象设置为容器中的条目值,该条目会被缓存吗?

2) 现在假设对象已经在容器中的定义文件中定义:

如果我执行以下操作:

  • 条目是否会被缓存,或者
  • 是否会引发错误,或者
  • 条目会“静默”不被缓存吗?

非常感谢你。

0 投票
1 回答
503 浏览

wordpress - 将 PHP-DI 用于使用 PSR-4 的 Wordpress 插件?

我正在使用https://github.com/DevinVinson/WordPress-Plugin-Boilerplate模板编写一个 wordpress 插件,并且我正在尝试配置 PHP-DI ( http://php-di.org/ ) 来处理注入我的插件中的类。

我的作曲家配置是这样的

在我的 Main.php 类中,我正在创建 PHP-DI Container 对象,并且我希望自动装配应该生效,所以我不需要在 addDefinitions() 方法中注册很多对象。

我有一个名为 LeagueCPT 的新类,我想在其中注入 Loader 对象引用

在原始代码中,我会手动创建 LeagueCPT 并手动传递引用,就像这样

我现在期待我应该能够调用 Container 来为 League 创建一个新对象,并注入正确的构造函数

但在每种情况下,我都看不到 LeagueCPT 被 PHP-DI 初始化。对于在这种情况下如何正确配置 DI 系统的任何建议,我将不胜感激。

0 投票
1 回答
173 浏览

symfony - 如何为控制器使用 PHP-DI Symfony Bridge?

我想将我最近设置的 Symfony 4 项目与 PHP-DI 6 和 PHP-DI Symfony Bridge 3 一起使用。

我的项目结构如下所示:

FooServiceBuzService实现FooServiceInterface.

/config/dependencies/common.php

IndexController获取FooServiceInterface注入的实例。

Kernel扩展DI\Bridge\Symfony\Kernel并实现了它的buildPHPDIContainer(...)

Everythings 似乎是根据PHP-DI Symfony Bridge 文档设置的。

如果只有一个FooServiceInterface. 但是当我再添加一个时,例如:

我收到一个错误:

运行时异常

无法自动连接服务“App\Interop\Website\Controller\IndexController”:方法“__construct()”的参数“$fooService”引用接口“App\Services\Dummy\FooServiceInterface”,但不存在此类服务。您可能应该将此接口别名为以下现有服务之一:“App\Services\Dummy\BuzService”、“App\Services\Dummy\FooService”。您是否创建了实现此接口的类?

为什么我会收到此错误以及如何使此结构正常工作?