问题标签 [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调用默认参数为null的方法
我正在尝试对具有默认参数的方法使用PHP-DI 调用,但出现此错误
致命错误:未捕获的 Invoker\Exception\NotEnoughParametersException:无法调用可调用对象,因为没有为参数 1 提供值...
PS:PHP-DI 6
php - 将 PHPUnit 与 PHP-DI 一起使用
我正在使用 PHP-DI 库,它通过使用引导程序和配置文件非常适合我的代码,正如 PHP-DI 文档所推荐的那样。
然后,在我的应用程序中,我通过调用引导程序来获取容器并开始工作:
所以现在我正在尝试使用 PHPUnit 设置单元测试。
我想在每个 Test 类中获取 $container ,以便我可以按照 PHP-DI 文档中的建议使用 $container->injectOn($this) 注入每个测试的所有依赖项。
我偶然发现了这个未解决的问题 [这主要是在我的脑海中],但它仍然是开放的,似乎没有任何建议。
https://github.com/PHP-DI/PHP-DI/issues/125
我唯一的想法是我可以像我的主应用程序一样在 setUp() 中调用引导程序吗?
这是我应该做的吗?有没有更优雅或推荐的方法来做到这一点?
谢谢!
php-di - PHP-DI:无论如何,定义文件以什么顺序加载到容器中?
我计划在单独的目录和多级子目录中拥有许多定义文件(例如配置文件)。让我们假设,这些文件将包含许多复杂的定义情况——可以这么说。
所以我想问:无论如何,定义文件以什么顺序加载到容器中?
注意:在与某个应用程序环境(如“prod”、“dev”等)对应的配置文件中找到的定义将始终覆盖“正常”定义。因此,这与最终答案无关。
谢谢你。
php - 如何从 index.php 中调用独白?
有使用 PHP-DI 的 Monolog 示例(从手册中,有 2 个文件 - index.php 和 config.php:
此 config.php 在以下代码中使用:
我现在如何在 index.php 中使用它?我经常这样使用 Monolog:
但是如何用 Container 来调用它?我能够在简单的 $container->set(), $container->get() 模式下做到这一点。但是以这种方式使用 Container Builder 我找不到办法。此外,当我制作时var_dump($container)
,其中没有任何记录器的迹象。
php - 通过 setter 方法进行依赖注入
在 PHP 中存在依赖注入问题,我似乎无法找到答案。好的,快速的 PHP 类:
我正在使用来自http://php-di.org/的 php-di 包,尽管我愿意更改。我的问题是,如何直接注入到 add_order() 函数中?构造注入很简单,例如:
我希望发生相同类型的注入,但同时直接调用 add_order() 函数。我想要这样的东西:
有什么帮助吗?谢谢~
php - php-di 如何访问容器定义
我有一些配置文件返回键值数组
我已将它作为定义添加到 php-di 容器中
问题是如何在 di 容器内使用的类的某些方法中从配置文件访问数据?
可以说我有一些课程
所以当我打电话时
一切都开始了,但我不知道如何访问注册类的方法中的定义数据,因为我在容器本身内没有容器实例来调用 smth
php - PHP-DI says missing parameter while in definition file has set
I am new to PHP-DI and I really do not understand what do I miss.
I have a container:
In the definition file:
And int the MyTestClass
For some reason I am getting this error message:
Fatal error: Uncaught DI\Definition\Exception\InvalidDefinition: Entry "Vendor\MyTestClass" cannot be resolved: Entry "Monolog\Logger" cannot be resolved: Parameter $name of __construct() has no value defined or guessable Full definition: Object ( class = Monolog\Logger lazy = false __construct( $name = #UNDEFINED# $handlers = (default value) array ( ) $processors = (default value) array ( ) ) ) Full definition: Object ( class = Vendor\MyTestClass lazy = false __construct( $logger = get(Monolog\Logger) ) ) in /var/www/dmholding.lh/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php on line 18
I am doing exactly as in the documentation.
Can somebody look at it?
php - 通过 php-di 进行依赖注入的定义
使用 php-di 进行依赖注入,但我显然没有做正确的事情。想知道是否有人可以告诉我我做错了什么。
好的,有一个 bootstrap.php 文件,里面没有命名空间,看起来像:
我相信您至少可以看到我正在尝试做的事情,并且它在技术上确实有效,尽管我确信我做错了。
我希望它可以互换,例如,您可以轻松地为 monolog/monolog 包翻转 Internet 记录器,或更改默认日志通道名称,或将数据库驱动程序翻转为 mysql 以外的某个类等。
但是,这些类相互依赖,因此必须按此顺序设置,如果放在 ContainerBuilder->AddDefinitions() 方法中,它只会抛出一个错误,说 app::class 无法解析。例如,log::class 构造函数注入了“app:class”,db::class 的构造函数同时注入了 app::class 和 loggerInterface::class 等。另外,我需要能够在定义这些时放入基于名称的参数。
任何见解都会有所帮助,因为我非常怀疑这是最好的方法,即使它确实有效。我是否应该只将容器注入到每个调用中,然后通过“container->get()”方法获取必要的对象/类?如果我可以直接注入构造函数,它会更好,更容易阅读。
任何帮助/见解将不胜感激。
php - 如何在php-di中注册calss以在实例化时自动调用某些方法
我以这种方式运行控制器
现在在控制器内部,如果我尝试自动装配模型,我需要使用模型
我收到有关错误参数类型的错误。控制器方法不应该总是使用一些模型,因为这个模型需要在方法内部实例化。
好的,然后我尝试直接实例化模型
但我收到的问题是我需要模型内的容器实例(例如,设置数据库连接,并且这些设置在容器内注册)。我可以像这样将容器实例从控制器传输到模型:
但是每次我需要一些模型时我都必须这样做,这很丑......
我是 php-di 的新手。我知道当我在方法内部实例化时 DI 不跟踪它......只是不知道如何完全设置它?
php - PHP-DI 使用先前定义的类
我正在尝试改进我的 PHP-DI 配置,但现在我卡住了。
我想为另一个类重用一个已经定义的类。
entityManager
类应该来自Database->getEntityManager
这是我的 di 配置文件的一部分:
当我注入数据库时,效果很好。注释的定义效果很好,但我想实现的是最后一行,但它失败了。
这是我的数据库类的完整实现:
当我的代码需要实例化时,entityManager
我收到此错误:
似乎它没有使用先前定义的数据库事物。
我错了什么?