首页 > 解决方案 > 在尊重/验证中使用自定义规则时,PHPStan 抛出未定义的静态方法

问题描述

我正在使用Respect/Validation类,并且我有自定义规则CustomRule()可以正常工作:

use Respect\Validation\Validator as v;

// ...

'email' => v::CustomRule()->email()->setName('email');

但这会导致 PHPStan 抛出错误:

Call to an undefined static method Respect\Validation\Validator::CustomRule().

但是,如果我在内置规则(例如,email())之后移动它,PHPStan 工作正常,没有错误:

'email' => v::email()->CustomRule()->setName('email');

需要明确的是,这两个代码都有效,但 PHPStan 认为第一个代码是无效的。

任何解决方法以便 PHPStan 会接受它,即使CustomRule()是先设置的?

更新:

我发现如果我编辑Respect\Validation\Validator类的文档块并将我的自定义规则附加到其内置规则列表中,它就可以工作!

/**
* ...
* @method static Validator CustomRule()
*/
class Validator extends AllOf
...

当然,直接从主类修改 doc 块是个坏主意。也就是说,我的问题仍然是一样的。或者,也许 PHPStan 有办法从我的CustomRule课堂上尊重我自己的文档块?

标签: phpvalidationanalysisrespect-validationphpstan

解决方案


遇到同样的问题。我所做的只是将自定义验证器添加到 phpstan 配置文件 (phpstan.neon)。它可以用正则表达式来完成,例如:

parameters:
    ignoreErrors:
        - '#Call to an undefined method Respect\\Validation\\Validator::[a-zA-Z0-9\\_]()#'

文档:https ://github.com/phpstan/phpstan#ignore-error-messages-with-regular-expressions

我想更多的解决方法。


推荐阅读