问题标签 [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 回答
135 浏览

php - 如何将 Symfony HttpFoundation 与 PHP-DI 一起用于 MVC

我正在努力为一个项目创建一个有效的 MVC 结构。

我正在使用什么:

这是我的代码。

容器.php

容器配置.php

路由器.php

这是我的基本控制器

最后,我的产品控制器

第一个问题是我在容器上设置的请求对象在我的控制器中不起作用。

示例网址example.com?foo=bar

此行返回 aSymfony\Component\HttpFoundation\Request它应该,但它似乎是一个新的,因为我无法使用 获取查询参数$this->request->query->all(),它返回空。

如果我创建Symfony\Component\HttpFoundation\Request::createFromGlobals();为全局变量,它会按预期工作,并且转储$this->request->query->all()返回预期的数组。

所以我的问题是,我如何才能最好地将所有这些组件结合在一起以形成一个工作结构?

谢谢!

0 投票
1 回答
299 浏览

php - Slim 框架:如何打破循环依赖注入?

我正在使用带有 PHP-DI 6 的 Slim 4.5.0 并且我有一个循环依赖问题。

我知道如何使用 setter 解决此类问题,但是在 SlimFramework 的上下文中,我什么都做不了。

发生错误时,我想向 Slack Channel 发送消息。

我需要为我的自定义 Logger 提供 SlackService。

我尝试在我的 Logger 类中使用 @Inject 关键字来设置 Slack 服务(并将其从构造函数中删除):

或者使用 setter 函数和 @Inject(有和没有类名)

但这不起作用,而我觉得这是要走的路。

我已经使用@Inject 在我的类(字符串值)上设置属性,它运行良好,但在这里,由于某些原因它没有。

我在这里没有找到任何可以帮助理解为什么它不起作用的东西。 https://php-di.org/doc/annotations.html

每次发生错误时,我都会收到一条错误消息,提示 slackService 为空 Uncaught Error: Call to a member function postMessage() on null

使 @Inject() 工作我缺少什么?

0 投票
2 回答
5106 浏览

php - PHP-DI 使用 set 方法时潜在的多态调用

问题

当我尝试在 PHP-DI 容器中设置新值时,我收到了来自 PHPStorm 的意外警告。

给定以下代码:

触发以下警告

潜在的多态调用。在其层次结构中没有成员

我理解警告的含义,但我不明白它为什么会弹出,特别是因为我在查看 Google 和 SO 时没有发现任何这种情况,并且文档没有提到它。

是否有我遗漏的东西,或者这是“误报”?

0 投票
0 回答
32 浏览

dependencies - 为什么不在php di注入容器函数中打印所有会话值

print_r(Auth::user());在容器注入功能中使用,但这里容器功能不允许

我的主要容器功能代码。

我想根据用户会话使用动态连接字符串。

0 投票
1 回答
291 浏览

php - 未捕获的错误:在 Slim-4 php 和 php-di 中调用未定义的方法 App\App::run()

在使用 Slim 和 PHP-DI 时,收到警告说

Uncaught Error: Call to undefined method App\App::run()

代码如下:

0 投票
1 回答
164 浏览

php-di - 与 symfony/dotenv 或 vlucas/phpdotenv 一起使用时,PHP-DI DI\env() 方法不起作用

由于不建议使用getenv()symfony/dotenvvlucas/phpdotenv默认禁用它,如何配置 DI\Definition\Resolve\EnvironmentVariableResolver 使用自定义 $variableReader 构造函数参数?

0 投票
0 回答
34 浏览

php - 使用 PHP-DI 和 PHPUnit 模拟某个构造函数参数

我正在使用 PHP-DI 将类注入到构造函数中,如下所示

现在我想知道是否可以用一个模拟替换我的构造函数中的一个参数,这样我就可以定义一个要返回的值,$this->activityService->findByActivityId($activityId);而不是调用那个真正的类。

我试过了

  1. 使用 mockbuilder,问题是我必须模拟每个构造函数注入的类
0 投票
0 回答
40 浏览

php - 类“App\Entities\Test”不是有效的实体或映射的超类。PHP, 教义

我发现了这个错误 Class "App\Entities\Test" is not a valid entity or mapped super class

实体路径正确

数据库的名称太正确了。我已经检查了大约一百万次。

我的实体:

初始化:

我的错误在哪里?我多次重新阅读文档,谷歌搜索它

0 投票
1 回答
38 浏览

php - 我将如何使用自动连接的类运行 cron

我目前正在构建一个使用Slim v4PHP-DI用于自动装配依赖项的应用程序。除了我需要构建一个使用一些自动连接的类的 CRON 之外,这真是太棒了。这是我的例子:

在这种情况下,通知服务会自动连接到使用通知工厂,这很棒。但我需要创建一个利用 NotificationService 发送通知的 CRON:

我希望能够使用 CRON 来调用定时通知文件,或者具有 TimedNotification 实例化的单独文件,例如0 23 * * * /my/dir/mycrons && php timednotifications.php

是否有一种行之有效的方法来执行此操作,或者我是否必须在文件中构建整个应用程序才能运行 CRON?

0 投票
0 回答
50 浏览

php - 在构造函数中使用 DI 类别名?

我正在使用具有以下配置的 php-di 库。

在我的用户类中,我试图注入数据库:

这是我从中得到的错误:

致命错误:未捕获的 DI\Definition\Exception\InvalidDefinition:无法解析条目“\App\Auth\User”:无法解析条目“数据库”:类不存在完整定义:对象(类 = #UNKNOWN# 数据库lazy = false ) 完整定义: /var/www/html/user-acl/vendor/php-di/php 中的对象 ( class = \App\Auth\User lazy = false __construct( $database = get(Database) ) ) -di/src/Definition/Exception/InvalidDefinition.php:19 堆栈跟踪:#0 /var/www/html/user-acl/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php( 156): DI\Definition\Exception\InvalidDefinition::create(Object(DI\Definition\ObjectDefinition), 'Entry "\App\Aut...') #1 /var/www/html/user-acl/vendor/ php-di/php-di/src/Definition/Resolver/ObjectCreator.php(71): DI\Definition\Resolver\ObjectCreator->createInstance(Object(DI\Definition\ObjectDefinition), Array) #2 /var/www/html/user-acl/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php(71): DI \Definition\Resolver\ObjectCreator->resolve(第 19 行 /var/www/html/user-acl/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php 中的对象

如果我这样做,它工作正常:

我觉得我在这里错过了一些东西。提前致谢!