问题标签 [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.
php - PHP-DI 没有注入所需的类
我根据做依赖注入使用php-di。请求首先到达配置 php-di 的 route.php 文件(例如在需要AccountService
时IAccountService
使用),然后要求容器创建适当的控制器。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 中抛出
我的错误在哪里?
php - PHP-DI 按名称注入参数
我正在一起使用 php-di 和 Doctrine。要使用 Doctrine,有一个bootstrap.php
构造$entityManager
对象的文件。该$entityManager
对象是在该文件中全局定义的,因此要在我的类中使用它,我必须注入它。
例如假设下面的类:
但是类型的$entityManager
定义不明确,或者当我调用echo gettype($entityManager);
它时会打印"object"
结果。所以我想我需要通过它的名字而不是它的类型来注入这个参数。我的意思是这样的:
但这不起作用。解决方案和最佳方法是什么?
php - Php-Di 注释性能
谁能解释我在 Php-Di 的性能方面什么更好?使用annotations
或plain constructor params
?注释 = 要编写的字符更少,但这是一个好习惯吗?
对比:
php - PHP-DI:路由和可选段
我将 PHP-DI 与 Slim 框架一起使用。在 Slim 中,您可以通过在其周围放置括号来使路线段成为可选。现在我在省略可选路由段时设置了 PHP-DI,我收到此错误:
这是我的路线:
我在 PHP-DI 文档中找不到任何关于可选部分的内容,只是如何获取命名段的值。
php - 引用定义为多维数组的 PHP-DI 定义
如果我有如下定义的数组,则RouteCollector
在其他对象中注入实例将完美执行:
router.options
但是,如果我将定义定义为数组,有没有办法达到相同的结果?例如,我如何在RouteCollector::class
定义中引用它的元素?
请注意,这不是将相应的完全限定的类名(如\FastRoute\RouteParser\Std
)作为参数传递给constructorParameter
方法。一般来说,它是关于引用数组中定义的配置选项。
谢谢您的支持。
php - PHP-DI 5:缓存值和定义
我正在使用 PHP-DI 5 依赖注入容器,并且我已经阅读了有关定义缓存的文档。虽然我还不确定这方面......所以我想问你:
1)如果我直接将一个对象设置为容器中的条目值,该条目会被缓存吗?
2) 现在假设对象已经在容器中的定义文件中定义:
如果我执行以下操作:
- 条目是否会被缓存,或者
- 是否会引发错误,或者
- 条目会“静默”不被缓存吗?
非常感谢你。
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 系统的任何建议,我将不胜感激。
symfony - 如何为控制器使用 PHP-DI Symfony Bridge?
我想将我最近设置的 Symfony 4 项目与 PHP-DI 6 和 PHP-DI Symfony Bridge 3 一起使用。
我的项目结构如下所示:
类FooService
和BuzService
实现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”。您是否创建了实现此接口的类?
为什么我会收到此错误以及如何使此结构正常工作?