银色条纹版本:4.2
我有一个自定义AssetAdapter
,它根据当前请求对文件系统进行了一些更改。我正在使用注射器来获取请求:
$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和资产的问题/冲突(GraphQL似乎并不总是有当前请求可用)。我想知道是否有办法在尝试通过Injector
来获取当前HTTPRequest之前是否可用/设置?
答案 0 :(得分:2)
是的,Injector::inst()->get()
将创建一个新实例(如果尚不存在)。由于HTTPRequest
在构造过程中需要两个参数,因此会出现错误。
您可以使用->has()
检查其中是否存在:
if (Injector::inst()->has(HTTPRequest::class)) {
$request = Injector::inst()->get(HTTPRequest::class);
// do something
}