php - 是否可以检测 HTTPRequest 是否可用?

标签 php silverstripe silverstripe-4

银条纹版本:4.2

我有一个自定义 AssetAdapter,它根据当前请求对文件系统进行一些更改。我正在使用注入(inject)器来获取请求:

$request = Injector::inst()->get(HTTPRequest::class);

在大多数情况下这工作正常,但在几个孤立的实例中,我收到错误:

ERROR [Emergency]: Uncaught ArgumentCountError: Too few arguments to function SilverStripe\Control\HTTPRequest::__construct(), 0 passed and at least 2 expected
IN GET /ecms-client/public/markseen
Line 157 in /project/path/vendor/silverstripe/framework/src/Control/HTTPRequest.php

这似乎是 GraphQL 和 Assets 的问题/冲突(GraphQL 似乎并不总是有可用的当前请求)。我想知道在尝试通过 Injector 获取当前 HTTPRequest 之前是否有方法检查它是否可用/设置?

最佳答案

是的,如果实例不存在,Injector::inst()->get() 将创建一个新实例。由于 HTTPRequest 在构造过程中需要两个参数,因此您会出错。

你可以使用 ->has() 检查是否存在:

if (Injector::inst()->has(HTTPRequest::class)) {
    $request = Injector::inst()->get(HTTPRequest::class);
    // do something
}

关于php - 是否可以检测 HTTPRequest 是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57215942/

相关文章:

silverstripe - 如何在 Silverstripe 4 的 GridField DataColumn 中显示格式化的 HTML

php - 单击按钮时如何将特定 HTML 表行值插入到 MySql 中

php - Ajax 自动建议不会按顺序显示字母。

php - 如何检查变量是否在PHP中通过引用传递

sublimetext3 - Sublime Text 3 构建系统在 SilverStripe 中运行/开发/构建

forms - 如何使用用户表单模块将表单字段放入 FieldGroup 中

php - 有没有办法在 silverstripe 表单字段周围添加包装 div

php - 如何在我的服务器上安装 Pdftk?

javascript - 在 silverstripe CMS 中,按下时在 TextareaField 中添加一个选项卡

silverstripe - 如何通过 SilverStripe 4 中的命令行运行 BuildTask 任务?