vzina/laravel-validation

Webman plugin vzina/laravel-validation

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/vzina/laravel-validation

dev-master 2026-01-06 10:38 UTC

This package is auto-updated.

Last update: 2026-01-06 10:38:18 UTC


README

简介

该组件将 Laravel 强大的验证功能引入 webman 框架中,提供了完整的数据验证解决方案。

所有方法和配置与 Laravel 几乎一致,因此使用方式可完全参考 Laravel Validation 文档

基本使用

use Vzina\LaravelValidation\ValidatorFactory;

$validator = make_validator(request_all(), [
    'title' => 'required|unique:posts|max:255',
    'file' => 'required|file|image',
    'body' => 'required',
]);

if ($validator->fails()) {
    return json($validator->errors()->first());
}

// 或者
request_validate([
    'title' => 'required|unique:posts|max:255',
    'file' => 'required|file|image',
    'body' => 'required',
]);

注解使用

use Vzina\Attributes\Attribute\Route\Controller;
use Vzina\Attributes\Attribute\Route\GetMapping;
use Vzina\Attributes\Attribute\Route\PostMapping;
use Vzina\LaravelValidation\Attribute\Validator;

#[Controller(prefix: '/api')]
class TestController
{
    #[GetMapping(path: ''), Validator([
        'a' => 'required|int',
        'b' => 'required|foo',
    ])]
    public function index()
    {
        return 'index:' . time();
    }

    #[PostMapping(path: 'upload'), Validator([
        'file' => 'required|file|image',
    ])]
    public function upload()
    {
        return 'upload:' . time();
    }
}

扩展规则

use Illuminate\Validation\Validator;
use Vzina\Attributes\Attribute\Listener;
use Vzina\LaravelValidation\ValidatorFactory;
use Vzina\LaravelValidation\ValidatorFactoryResolved;

#[Listener(event: ValidatorFactoryResolved::class)]
class ValidatorListener
{
    public function handle(ValidatorFactory $factory)
    {
        $factory->extend('foo', function (string $attribute, mixed $value, array $parameters, Validator $validator): bool {
            return $value == 'foo';
        });

        // 当创建一个自定义验证规则时,你可能有时候需要为错误信息定义自定义占位符这里扩展了 :foo 占位符
        $factory->replacer('foo', function (string $message, string $attribute, string $rule, array $parameters): array|string {
            return str_replace(':foo', $attribute, $message);
        });
    }
}