jbboehr/phpstan-laravel-validation

Laravel Validation 扩展程序 for PHPStan

安装量: 8,796

依赖者: 0

建议者: 0

安全性: 0

星标: 4

关注者: 2

分支: 1

开放问题: 2

类型:phpstan-extension

dev-master 2023-09-13 03:26 UTC

This package is auto-updated.

Last update: 2024-09-13 06:00:51 UTC


README

ci License: AGPL v3+ stability-experimental

说明

如果提供给 Laravel 验证器的规则是常量表达式,那么 \Illuminate\Validation\Validator::validated() 返回的数组结构在编译时已知,可以进行静态分析。

$request = new \Illuminate\Http\Request();

$data = \Illuminate\Support\Facades\Validator::make($request->all(), [
    'person.*.email' => 'required|email|unique:users',
    'person.*.first_name' => 'required|string',
    'person.*.age' => 'required|integer|string',
])->validated();

\PHPStan\dumpType($data);
// array{person: array<int|string, array{email: non-empty-string, first_name: string, age: numeric-string}>}

$data = $request->validate([
    'person.*.email' => 'required|email|unique:users',
    'person.*.first_name' => 'required|string',
    'person.*.age' => 'required|integer|string',
]);

\PHPStan\dumpType($data);
// array{person: array<int|string, array{email: non-empty-string, first_name: string, age: numeric-string}>}

如果输入数据不符合规则数组,将抛出 \Illuminate\Validation\ValidationException,从而保留类型安全。

安装

要使用此扩展程序,请在 Composer 中要求它

composer require --dev jbboehr/phpstan-laravel-validation

如果您还安装了 phpstan/extension-installer,那么您就准备好了!

手动安装

如果您不想使用 phpstan/extension-installer,请将 extension.neon 包含在您的项目 PHPStan 配置中

includes:
    - vendor/jbboehr/phpstan-laravel-validation/extension.neon

注意事项

  • Laravel 的验证器不进行任何类型转换,例如,numeric 生成类型联合 int|float|numeric-string。如果您知道它始终是字符串,可以使用 numeric|string 来细化类型,并得到一个纯 numeric-string
  • 通配符必须按整数索引,并且不能与非通配符规则混合。
  • 自定义验证规则、隐式规则和枚举目前不支持。

许可证

本项目受 AGPL v3+ 许可证许可 - 有关详细信息,请参阅 LICENSE.md 文件。