jbboehr / phpstan-laravel-validation
Laravel Validation 扩展程序 for PHPStan
dev-master
2023-09-13 03:26 UTC
Requires
- php: ^8.0
- nikic/php-parser: ^4.15
- phpstan/phpstan: ^1.9
Requires (Dev)
- brick/varexporter: ^0.3.7
- drupol/composer-plugin-nixify: dev-main#fd8faf5b898f5366c9d107eb407360b41a477b8f
- illuminate/http: ^9.45 || ^10.0
- illuminate/validation: ^9.45 || ^10.0
- laravel/framework: ^9.45 || ^10.0
- laravel/laravel: ^9.45 || ^10.0
- phpstan/phpstan-php-parser: ^1.1
- phpstan/phpstan-phpunit: *
- phpstan/phpstan-strict-rules: ^1.4
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6.0
- vimeo/psalm: ^5.4
This package is auto-updated.
Last update: 2024-09-13 06:00:51 UTC
README
说明
如果提供给 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 文件。