PHP Laminas PHPStan -调用一个未定义方法LaminasStdlibRequestInterfac



我们正在一个laminas项目上运行php,遇到错误。

作为一个例子,在控制器中我们有一些正常工作的标准代码。

$request = $this->getRequest();

if ($request->isPost()){…}

然而phpstan在抱怨:

调用未定义方法LaminasStdlibRequestInterface::isPost()

问题出现,getRequest()实际上返回LaminasHttpPhpEnvironmentRequest的实例,它继承了LaminasHttpRequest的isPost函数。但是这个函数没有在RequestInterface中定义。

一个解决方案是在RequestInterface中定义isPost,尽管我更愿意避免更改供应商代码。

有没有更好的方法来解决这个问题?

(一个迟来的回答,但也许有人会发现它有用。)

LaminasMvcControllerAbstractController类型提示其请求为LaminasStdlibRequestInterface。从技术上讲,它不一定是LaminasHttpRequest的实例,因为您可以在控制台应用程序中使用Laminas控制器。以下是解决这个问题的一些方法。

(A)检查getRequest()类型

如果您确保方法返回的实际上是LaminasHttpRequest: ,则PHPStan不应该抱怨。
$request = $this->getRequest();
if (! $request instanceof LaminasHttpRequest) {
// throw or return
}

assert()也可以。

(B)给PHPStan更多Laminas的见解

Laminas Framework的PHPStan扩展使getRequest()在PHPStan测试期间返回一个实际的响应实例而不是接口。请参考软件包README获取安装说明。

(C)忽略警告

PHPStan支持各种方法来忽略它的错误,详见他们的网站。通过使用配置文件,您可以忽略匹配指定正则表达式的错误。在本例中,最小配置如下所示:
parameters:
ignoreErrors:
- '#Call to an undefined method Laminas\Stdlib\RequestInterface::isPost()#'

相关内容

  • 没有找到相关文章

最新更新