PHPackages                             chmielewskitomasz/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. [Validation &amp; Sanitization](/categories/validation)
4. /
5. chmielewskitomasz/validator

ActiveProject[Validation &amp; Sanitization](/categories/validation)

chmielewskitomasz/validator
===========================

Simple validation tool, allows you to validate both simple and nested structures, introduces conditional fields. All you need is here. Perfect for REST endpoint validation. No dependencies required.

1.2.7(7y ago)1881MITPHPPHP ^7.1

Since Jan 28Pushed 7y ago1 watchersCompare

[ Source](https://github.com/chmielewskitomasz/validator)[ Packagist](https://packagist.org/packages/chmielewskitomasz/validator)[ RSS](/packages/chmielewskitomasz-validator/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (5)Versions (26)Used By (0)

Simple, lightweight input validation lib for PHP
------------------------------------------------

[](#simple-lightweight-input-validation-lib-for-php)

[![Build Status](https://camo.githubusercontent.com/4ace4c93613957b26ceab06c8b6bad63ca022997f127b3f3151733955054b6b0/68747470733a2f2f7472617669732d63692e6f72672f63686d69656c6577736b69746f6d61737a2f76616c696461746f722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/chmielewskitomasz/validator)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/d2921fc3162592313686721b1d4c05abb34e0515cdd6ba2c8b4a3d57d208f4c9/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f63686d69656c6577736b69746f6d61737a2f76616c696461746f722f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/chmielewskitomasz/validator/?branch=master)[![Code Coverage](https://camo.githubusercontent.com/e6a87df911ad0f8c917fcf8fbf87f9956c5a3f60a01f075a8a4ab0d260dccd5b/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f63686d69656c6577736b69746f6d61737a2f76616c696461746f722f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/chmielewskitomasz/validator/?branch=master)[![Build Status](https://camo.githubusercontent.com/70e615f3de3ad83e7a25d34bbf2fd65a2b6107b6d196782ccda1318936496a05/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f63686d69656c6577736b69746f6d61737a2f76616c696461746f722f6261646765732f6275696c642e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/chmielewskitomasz/validator/build-status/master)[![Latest Stable Version](https://camo.githubusercontent.com/2aca05b6a7fa384c651284c6dcaa1a067d19bbba89024cd3ffafb4981a25dbba/68747470733a2f2f706f7365722e707567782e6f72672f63686d69656c6577736b69746f6d61737a2f76616c696461746f722f762f737461626c65)](https://packagist.org/packages/chmielewskitomasz/validator)[![License](https://camo.githubusercontent.com/5a2953be05608276c54d0809e4a4eb063d7e77a88c039e777134c1384dda2ff6/68747470733a2f2f706f7365722e707567782e6f72672f63686d69656c6577736b69746f6d61737a2f76616c696461746f722f6c6963656e7365)](https://packagist.org/packages/chmielewskitomasz/validator)

[![Donate on PayPal](https://camo.githubusercontent.com/e1ff554a09e8e92bef25abc553ff05b88f45afd695877cf12f3a46558ef65b2e/68747470733a2f2f7777772e70617970616c6f626a656374732e636f6d2f656e5f55532f692f62746e2f62746e5f646f6e61746543435f4c472e676966)](https://paypal.me/chmielewskitomasz)

#### How to install it?

[](#how-to-install-it)

```
composer require chmielewskitomasz/validator

```

#### How to use it?

[](#how-to-use-it)

```
require_once __FILE__ . '/vendor/autoload.php';

use Hop\Strategy\Strategy;
use Hop\Strategy\Field;
use Hop\StdValidator;

// first, create your input validation strategy
class AlbumInputValidator implements Strategy
{
    /**
     * @inheritdoc
     */
    public function getFields(): array
    {
        $nameField = new Field(
            'name',
            true,
            null
        );

        $phoneField = new Field(
            'phone'
            false,
            null
        );

        $phoneField->registerValidator('Digits');
        $phoneField->registerValidator('Length', ['min' => 9, 'max' => 9]);

        return [
            $nameField,
            $phoneField
        ];
    }
}

// second, create stdValidator
$validator = StdValidator::fromConfig(include __DIR__ . '/config/validators.php');

// three - validate your input
$myInput = [
    'name' => 'Tom',
    'phone' => '999888000'
];
$validator->isValid($myInput, new AlbumInputValidator());  // true
$validator->getMessages($myInput, new AlbumInputValidator());  // null

$myWrongInput = [
    'name' => 'Tom',
    'phone' => 'thisShouldBeA9DigitsNumber'
];
$validator->isValid($myWrongInput, new AlbumInputValidator()) // false
$validator->getMessages($myWrongInput, new AlbumInputValidato())
//  ['phone' => Message()]
```

#### Ok, I want my field to be optional, but if it is passed I want to validate it

[](#ok-i-want-my-field-to-be-optional-but-if-it-is-passed-i-want-to-validate-it)

```
//    In strategy:
//    ...
    public function getFields(): array
    {
        $field = new Field(
            'phone',
            false, // set second parameter 'required' as false,
            null
        );

        $field->registerValidator('Digits', null);

        return [$field];
    }
//    ...

// and then
$validator->isValid([], new AlbumInputValidator()); // true
$validator->isValid(['phone' => 'abcdefg'], new AlbumInputValidator()); // false
```

#### I want a single field to be conditional. I mean, if eg street name is not passed, I don't want house number to be required.

[](#i-want-a-single-field-to-be-conditional-i-mean-if-eg-street-name-is-not-passed-i-dont-want-house-number-to-be-required)

Have a look:

```
//    In strategy:
//    ...
    public function getFields(): array
    {
        $streetField = new Field(
            'street',
            false,
            null
        );

        $houseNumberField = new Field(
            'houseNumber',
            true,
            function (array $inputData) {
                return !isset($inputData['street']);
            }
        );

        return [$streetField, $houseNumberField];
    }
//    ...

// and then
$validator->isValid(['street' => 'High st.'], new AlbumInputValidator()); // false
$validator->isValid([], new AlbumInputValidator()); // true
$validator->isValid(['street' => 'High st.', 'houseNumber' => '12'], new AlbumInputValidator()); // true
```

#### How can I implement my own validators?

[](#how-can-i-implement-my-own-validators)

Easily. You can help me to contribute this project. Or if you don't want to, just create a class implementing `Hop\Validator\Strategy\Strategy` and pass it to `StdValidator::fromConfig()` as array, eg

```
$myValidators = [
    'MyValidator' => 'Path\To\Validator\Class'
];

$validator = StdValidator::fromConfig(
    \array_merge(include __DIR__ . '/config/validators.php', $myValidators)
);
```

© Chmielewski Tomasz

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Total

24

Last Release

2853d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/038594f6208c40a2b5950d709e02a40acd719f49296fd706a1bf87698b0d1378?d=identicon)[chmielewskitomasz](/maintainers/chmielewskitomasz)

---

Top Contributors

[![chmielewskitomasz](https://avatars.githubusercontent.com/u/35891725?v=4)](https://github.com/chmielewskitomasz "chmielewskitomasz (37 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/chmielewskitomasz-validator/health.svg)

```
[![Health](https://phpackages.com/badges/chmielewskitomasz-validator/health.svg)](https://phpackages.com/packages/chmielewskitomasz-validator)
```

###  Alternatives

[webmozart/assert

Assertions to validate method input/output with nice error messages.

7.6k894.0M1.2k](/packages/webmozart-assert)[bensampo/laravel-enum

Simple, extensible and powerful enumeration implementation for Laravel.

2.0k15.9M104](/packages/bensampo-laravel-enum)[swaggest/json-schema

High definition PHP structures with JSON-schema based validation

48612.5M73](/packages/swaggest-json-schema)[stevebauman/purify

An HTML Purifier / Sanitizer for Laravel

5325.6M19](/packages/stevebauman-purify)[ashallendesign/laravel-config-validator

A package for validating your Laravel app's config.

217905.3k5](/packages/ashallendesign-laravel-config-validator)[crazybooot/base64-validation

Laravel validators for base64 encoded files

1341.9M8](/packages/crazybooot-base64-validation)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
