PHPackages                             krzysztofrewak/laravel-oop-validator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. krzysztofrewak/laravel-oop-validator

ActiveLibrary[Framework](/categories/framework)

krzysztofrewak/laravel-oop-validator
====================================

Laravel Validator object-oriented wrapper

v0.0.3(6y ago)805.8k2[1 issues](https://github.com/krzysztofrewak/laravel-oop-validator/issues)MITPHPPHP ^7.3CI failing

Since Oct 29Pushed 6y ago3 watchersCompare

[ Source](https://github.com/krzysztofrewak/laravel-oop-validator)[ Packagist](https://packagist.org/packages/krzysztofrewak/laravel-oop-validator)[ RSS](/packages/krzysztofrewak-laravel-oop-validator/feed)WikiDiscussions master Synced yesterday

READMEChangelog (3)Dependencies (3)Versions (4)Used By (0)

[![Latest Stable Version](https://camo.githubusercontent.com/35d188181b132a53e3cd31e8dca70a758e5fc05e133a53699af5f2cded9670a3/68747470733a2f2f706f7365722e707567782e6f72672f6b727a79737a746f66726577616b2f6c61726176656c2d6f6f702d76616c696461746f722f762f737461626c65)](https://packagist.org/packages/krzysztofrewak/laravel-oop-validator) [![Total Downloads](https://camo.githubusercontent.com/000cd59b70cc24057ec77324749646ca66c98cd5c3a428df7dd251c6cb33e3b9/68747470733a2f2f706f7365722e707567782e6f72672f6b727a79737a746f66726577616b2f6c61726176656c2d6f6f702d76616c696461746f722f646f776e6c6f616473)](https://packagist.org/packages/krzysztofrewak/laravel-oop-validator) [![License](https://camo.githubusercontent.com/11dac3179cc2c38f25877754ac0b3acf7d0ee0f802339d658ba73678497d9b11/68747470733a2f2f706f7365722e707567782e6f72672f6b727a79737a746f66726577616b2f6c61726176656c2d6f6f702d76616c696461746f722f6c6963656e7365)](https://packagist.org/packages/krzysztofrewak/laravel-oop-validator)

[![it's more lines of code but I personally think it's also more readable](https://camo.githubusercontent.com/a2fc68da25ca12a60e3f0fdcdbf7878976ee6d3e365df7bef926690006e06c8d/68747470733a2f2f707265766965772e726564642e69742f703939687a693475326a7633312e706e673f77696474683d3139323626666f726d61743d706e67266175746f3d7765627026733d62663633326134386637636535656463653939613032653431626539353532666466313361663131)](https://camo.githubusercontent.com/a2fc68da25ca12a60e3f0fdcdbf7878976ee6d3e365df7bef926690006e06c8d/68747470733a2f2f707265766965772e726564642e69742f703939687a693475326a7633312e706e673f77696474683d3139323626666f726d61743d706e67266175746f3d7765627026733d62663633326134386637636535656463653939613032653431626539353532666466313361663131)

laravel-oop-validator
=====================

[](#laravel-oop-validator)

Package was created for Laravel developers who need for some reason object-oriented approach to validation. It basically maps all string rules into easy manageable chained methods.

Installation
------------

[](#installation)

Use composer:

```
composer require krzysztofrewak/laravel-oop-validator

```

Usage
-----

[](#usage)

Most of the Laravel validation rules were mapped into `Field` methods. You can use `ValidationBuilder` or `PipelinedValidationBuilder` instances: first one will return rules in arrayed form, second one in string pipeline.

### Simple rule chains

[](#simple-rule-chains)

```
$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"]
```

### More complex rule chains

[](#more-complex-rule-chains)

```
$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"]
```

### Nested rules chains

[](#nested-rules-chains)

Nested validation rules could look like this:

```
$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"]
```

### Custom rules chains

[](#custom-rules-chains)

Custom validation rules could look like this:

```
$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 integration
-------------------

[](#laravel-integration)

You can add instance of `ValidationBuilder` into your `FormRequest`'s `rules()` method or any other place where you can put array of rules:

```
