krzysztofrewak / laravel-oop-validator
Laravel 验证器面向对象包装器
v0.0.3
2020-03-22 15:52 UTC
Requires
- php: ^7.3
- illuminate/support: ^6.3|^7.0
- illuminate/validation: ^6.3|^7.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-29 05:29:36 UTC
README
laravel-oop-validator
该包是为需要面向对象验证方法的 Laravel 开发者创建的。它基本上将所有字符串规则映射到易于管理的链式方法。
安装
使用 composer
composer require krzysztofrewak/laravel-oop-validator
用法
大多数 Laravel 验证规则都已映射到 Field
方法。您可以使用 ValidationBuilder
或 PipelinedValidationBuilder
实例:第一个将返回数组形式的规则,第二个将返回字符串管道形式的规则。
简单的规则链
$validator->validate("email", function (Field $field): void { $field->string()->required()->email(["rfc"]) }); $validator->getRules();
// for ValidationBuilder: ["email" => ["string", "required", "email:rfc"]] // for PipelinedValidationBuilder: ["email" => "string|required|email:rfc"]
更复杂的规则链
$validator->validate("avatar", function (Field $field): void { $field->required() ->mimes(["jpeg", "png"]) ->unique("users", "avatar") ->dimensions(function(Dimensions $dimensions): void { $dimensions->ratio(3/2); }); }); $validator->getRules();
// for ValidationBuilder: ["avatar" => ["required", "mimes:jpeg,png", "unique:users,avatar", "dimensions:ratio=1.5"]] // for PipelinedValidationBuilder: ["avatar" => "required|mimes:jpeg,png|unique:users,avatar|dimensions:ratio=1.5"]
嵌套规则链
嵌套验证规则可能看起来像这样
$validator = new ValidationBuilder(); $validator->validateEach("tags", function (Field $field): void { $field->array(); }); $validator->validateInEach("id", "tags", function (Field $field): void { $field->required()->exists("tags", "id"); });
// for ValidationBuilder: ["tags.*:" => ["array"], "tags.*.id:" => ["required", "exists:tags,id"]] // for PipelinedValidationBuilder: ["tags.*:" => "array", "tags.*.id:" => "required|exists:tags,id"]
自定义规则链
自定义验证规则可能看起来像这样
$validator = new ValidationBuilder(); $validator->validate("field", function (Field $field): void { $field->required()->customRule(CustomRule::class); });
// for ValidationBuilder: ["field" => ["required", CustomRule::class]] // for PipelinedValidationBuilder it will throw NotAllowedRuleException()
Laravel 集成
您可以将 ValidationBuilder
的实例添加到 FormRequest
的 rules()
方法或任何可以放置规则数组的地方。
<?php declare(strict_types = 1); namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use KrzysztofRewak\LaravelOOPValidator\Field; use KrzysztofRewak\LaravelOOPValidator\ValidationBuilder; /** * Class CreateNewUserRequest * @package App\Http\Requests */ class CreateNewUserRequest extends FormRequest { /** * @var ValidationBuilder */ protected $builder; /** * CreateNewUserRequest constructor. * @param ValidationBuilder $builder */ public function __construct(ValidationBuilder $builder) { $this->builder = $builder; } /** * @return bool */ public function authorize(): bool { return true; } /** * @return array */ public function rules(): array { $this->builder->validate("email", function (Field $field): void { $field->required()->string()->email()->unique("users", "email"); }); $this->builder->validate("password", function (Field $field): void { $field->required()->string()->min(6)->confirmed(); }); return $this->builder->getRules(); } }