PHPStan выдает неопределенный статический метод при использовании пользовательских правил в Respect/Validation

Я использую класс 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
...

Конечно, изменять блок документации напрямую из основного класса — плохая идея. Тем не менее, мой вопрос остается прежним. Или, может быть, есть способ для PHPStan соблюдать мой собственный блок документации из моего класса CustomRule?


person IMB    schedule 15.12.2018    source источник


Ответы (1)


Столкнулся с той же проблемой. Что я сделал, так это просто добавил пользовательские валидаторы в конфигурационный файл 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

Я думаю, это скорее обходной путь.

person echibi    schedule 18.01.2019