问题标签 [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 - 如何将 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()
返回预期的数组。
所以我的问题是,我如何才能最好地将所有这些组件结合在一起以形成一个工作结构?
谢谢!
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() 工作我缺少什么?
php - PHP-DI 使用 set 方法时潜在的多态调用
问题
当我尝试在 PHP-DI 容器中设置新值时,我收到了来自 PHPStorm 的意外警告。
给定以下代码:
触发以下警告
潜在的多态调用。在其层次结构中没有成员
我理解警告的含义,但我不明白它为什么会弹出,特别是因为我在查看 Google 和 SO 时没有发现任何这种情况,并且文档没有提到它。
是否有我遗漏的东西,或者这是“误报”?
dependencies - 为什么不在php di注入容器函数中打印所有会话值
我print_r(Auth::user());
在容器注入功能中使用,但这里容器功能不允许
我的主要容器功能代码。
我想根据用户会话使用动态连接字符串。
php - 未捕获的错误:在 Slim-4 php 和 php-di 中调用未定义的方法 App\App::run()
在使用 Slim 和 PHP-DI 时,收到警告说
Uncaught Error: Call to undefined method App\App::run()
代码如下:
php-di - 与 symfony/dotenv 或 vlucas/phpdotenv 一起使用时,PHP-DI DI\env() 方法不起作用
由于不建议使用getenv()
和symfony/dotenv,vlucas/phpdotenv默认禁用它,如何配置 DI\Definition\Resolve\EnvironmentVariableResolver 使用自定义 $variableReader 构造函数参数?
php - 使用 PHP-DI 和 PHPUnit 模拟某个构造函数参数
我正在使用 PHP-DI 将类注入到构造函数中,如下所示
现在我想知道是否可以用一个模拟替换我的构造函数中的一个参数,这样我就可以定义一个要返回的值,$this->activityService->findByActivityId($activityId);
而不是调用那个真正的类。
我试过了
- 使用 mockbuilder,问题是我必须模拟每个构造函数注入的类
php - 类“App\Entities\Test”不是有效的实体或映射的超类。PHP, 教义
我发现了这个错误
Class "App\Entities\Test" is not a valid entity or mapped super class
实体路径正确
数据库的名称太正确了。我已经检查了大约一百万次。
我的实体:
初始化:
我的错误在哪里?我多次重新阅读文档,谷歌搜索它
php - 我将如何使用自动连接的类运行 cron
我目前正在构建一个使用Slim v4
和PHP-DI
用于自动装配依赖项的应用程序。除了我需要构建一个使用一些自动连接的类的 CRON 之外,这真是太棒了。这是我的例子:
在这种情况下,通知服务会自动连接到使用通知工厂,这很棒。但我需要创建一个利用 NotificationService 发送通知的 CRON:
我希望能够使用 CRON 来调用定时通知文件,或者具有 TimedNotification 实例化的单独文件,例如0 23 * * * /my/dir/mycrons && php timednotifications.php
是否有一种行之有效的方法来执行此操作,或者我是否必须在文件中构建整个应用程序才能运行 CRON?
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 中的对象
如果我这样做,它工作正常:
我觉得我在这里错过了一些东西。提前致谢!