银条纹版本: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/