macocci7/purephp-validation

纯 PHP 的 illuminate/validation 包装器。

0.0.4 2024-05-23 05:31 UTC

This package is auto-updated.

Last update: 2024-09-28 05:13:19 UTC


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. 示例

7. 许可证

MIT

版权所有 2024 macocci7