macocci7 / purephp-validation
纯 PHP 的 illuminate/validation 包装器。
Requires
- php: >=8.2
- illuminate/validation: ^11.5
Requires (Dev)
- askdkc/breezejp: ^1.8
- php-parallel-lint/php-parallel-lint: ^1.4
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.1
- squizlabs/php_codesniffer: ^3.9
README
1. 特性
Purephp Validation 是一个独立的库,用于在 Laravel 框架之外使用 Illuminate\Validation 包。
本库基于 jeffochoa/validator-factory,
本库经过定制,可以与静态调用一起使用,类似于 Laravel Facade。
$validator = Validator::make( $data, $rules, $messages, $attributes, );
它还支持 Password 规则对象和 File 规则对象。
$validator = Validator::make( data: $data, rules: [ 'password' => [ 'required', Password::min(8), ], 'attachment' => [ 'required', File::image(), ], ]; );
此外,它还独特地支持 Instance 规则对象。
$validator = Validator::make( data: [ 'prop1' => new Instance([]), 'prop2' => 'Instance', 'prop3' => fn () => true, ], rules: [ 'prop1' => Instance::of(Instance::class), 'prop2' => Instance::of([ Instance::class, Validator::class, (fn () => true)::class, ]), 'prop3' => Instance::of('Closure'), ], );
2. 内容
3. 要求
- PHP 8.2 或更高版本
- 已安装 Composer
4. 安装
composer require macocci7/purephp-validation
5. 使用
5.1. 基本用法
首先,将 autoload.php 导入到您的代码中(在 src/ 文件夹中),如下所示:
require_once __DIR__ . '/../vendor/autoload.php';
然后,按照如下方式创建 Illuminate\Validation\Validator 的新实例:
use Macocci7\PurephpValidation\ValidatorFactory as Validator; $validator = Validator::make( data: [ 'name' => 'foo', 'email' => 'foo@example.com', 'password' => 'Passw0rd', ], rules: [ 'name' => 'required|string|min:3|max:40', 'email' => 'required|email:rfc', 'password' => 'required|string|min:8|max:16', ], );
现在,您可以检查验证结果。
if ($validator->fails()) { var_dump($validator->errors()->message); } else { echo "🎊 Passed 🎉" . PHP_EOL; }
您可以在 Laravel 官方文档 中了解更多关于编写验证规则的信息。
以下是一个基本用法的示例代码: BasicUsage.php
5.2. 设置翻译根路径和语言
您可能希望将 lang 文件夹放置在 vendor/ 之外的其他位置。
您可以在创建 Validator 实例之前设置翻译根路径。
// Set Translations Root Path (optional) // - The path must end with '/'. // - 'lang/' folder must be placed under the path. Validator::translationsRootPath(__DIR__ . '/');
您还可以在创建 Validator 实例之前设置语言。
// Set lang: 'en' as default (optional) Validator::lang('ja');
以下是一个设置翻译根路径和语言的示例代码: SetTranslationsRootPath.php
5.3. 使用 Password 规则对象
您可以使用 Laravel 的 Password 规则对象来验证密码。
use Macocci7\PurephpValidation\Rules\PasswordWrapper as Password; $validator = Validator::make( data: [ 'password' => 'pass' ], rules: [ 'password' => [ 'required', Password::min(8) ->max(16) // at least one letter ->letters() // at least one uppercase // and at least one lowercase letter ->mixedCase() // at least one number ->numbers() // at least one symbol ->symbols() // not in a data leak ->uncompromised(), ], ], );
您可以在 Laravel 官方文档 中了解更多关于 Laravel 的 Password 规则对象的信息。
以下是一个使用 Password 规则对象的示例代码: ValidatePassword.php
5.4. 使用 File 规则对象
您可以使用 Laravel 的 File 规则对象来验证文件。
use Illuminate\Validation\Rule; use Macocci7\PurephpValidation\Rules\FileWrapper as File; use Symfony\Component\HttpFoundation\File\File as SymfonyFile; $path = __DIR__ . '/../storage/uploaded/foo.jpg'; $validator = Validator::make( data: [ 'photo' => new SymfonyFile($path), ], rules: [ 'photo' => [ 'required', File::image() ->min(10) // kilo bytes ->max(144) // kilo bytes ->dimensions( Rule::dimensions() ->maxWidth(200) // pix ->maxHeight(300) // pix ), ], ], );
您可以在 Laravel 官方文档 中了解更多关于 Laravel 的 File 规则对象的信息。
以下是一个使用 Laravel 的 File 规则对象的示例代码: ValidateFile.php
5.5. 使用 Instance 规则对象
您可以使用 Instance 规则对象来验证对象(独特特性)。
通过使用 Instance::of($class) 方法作为规则,您可以在验证中执行 $value instanceof $class。
Instance::of() 接受类名作为参数。
use Macocci7\PurephpValidation\Rules\Instance; $validator = Validator::make( data: $data, rules: [ 'prop1' => Instance::of(Instance::class), 'prop2' => Instance::of([ // Macocci7\PurephpValidation\Rules\Instance Instance::class, // Macocci7\PurephpValidation\ValidatorFactory Validator::class, // Closure (fn () => true)::class, ]), 'prop3' => Instance::of('Closure'), ], );
以下是一个使用 Instance 规则对象的示例代码: ValidateInstance.php
6. 示例
- BasicUsage.php
- SetTranslationsRootPath.php
- ValidatePassword.php
- ValidateFile.php
- ValidateInstance.php
7. 许可证
版权所有 2024 macocci7