sedlatschek/laravel-conditional-equals-validation

Additional rules for conditional equals validation

v1.0.0-beta.7 2023-07-19 06:23 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

This package provides additional validation rules for Laravel projects:

Equals

$request->validate([
    'a' => ['boolean', (new Equals(true))->if('b', false)],
    'b' => ['boolean']
]);

NotEquals

$request->validate([
    'a' => ['string', (new NotEquals('foo'))->ifAnyOf(['b', 'c'], 'bar')],
    'b' => ['string'],
    'c' => ['string'],
]);

See Usage for all possibilites! Also know that the native method Rule::when may be a better alternative to this package.

Installation

You can install the package via composer:

composer require sedlatschek/laravel-conditional-equals-validation

Usage

If

Evaluate one other fields value.

$request->validate([
    'a' => ['string', (new Equals('foo'))->if('b', 'bar')],
    'b' => ['string'],
]);

IfNot

Evaluate one other fields value.

$request->validate([
    'a' => ['string', (new Equals('foo'))->ifNot('b', 'bar')],
    'b' => ['string'],
]);

IfAllOf

Evaluate if all of the given fields match the given value.

$request->validate([
    'a' => ['string', (new Equals('foo'))->ifAllOf(['b', 'c'], 'bar')],
    'b' => ['string'],
    'c' => ['string'],
]);

Example validation results:

// passes
$data = [
    'a' => 'foo',
    'b' => 'bar',
    'c' => 'bar',
];

// fails
$data = [
    'a' => 'x',
    'b' => 'bar',
    'c' => 'bar',
];

// passes
$data = [
    'a' => 'foo',
    'b' => 'bar',
    'c' => 'x',
];

IfAnyOf

Evaluate if any of the given fields match the given value.

$request->validate([
    'a' => ['string', (new Equals('foo'))->ifAnyOf(['b', 'c'], 'bar')],
    'b' => ['string'],
    'c' => ['string'],
]);

Example validation results:

// passes
$data = [
    'a' => 'foo',
    'b' => 'bar',
    'c' => 'x',
];

// fails
$data = [
    'a' => 'x',
    'b' => 'bar',
    'c' => 'x',
];

// passes
$data = [
    'a' => 'foo',
    'b' => 'x',
    'c' => 'x',
];

IfNoneOf

Evaluate if none of the given fields match the given value.

$request->validate([
    'a' => ['string', (new Equals('foo'))->ifNoneOf(['b', 'c'], 'bar')],
    'b' => ['string'],
    'c' => ['string'],
]);

Example validation results:

// passes
$data = [
    'a' => 'foo',
    'b' => 'x',
    'c' => 'x',
];

// fails
$data = [
    'a' => 'x',
    'b' => 'x',
    'c' => 'x',
];

// passes
$data = [
    'a' => 'foo',
    'b' => 'x',
    'c' => 'bar',
];

Combined

All of the above conditions can be chained. The connection between each condition is seen as an and operator.

$request->validate([
    'a' => ['string', (new Equals('foo'))->if('b', 'bar')->ifAnyOf(['c', 'd'], false)->ifAllOf(['e', 'f', 'g'], 1),
    'b' => ['string'],
    'c' => ['boolean'],
    'd' => ['boolean'],
    'e' => ['integer'],
    'f' => ['integer'],
    'g' => ['integer'],
]);

Example validation results:

// passes
$data = [
    'a' => 'foo',
    'b' => 'bar',
    'c' => true,
    'd' => false,
    'e' => 1,
    'f' => 1,
    'g' => 1,
];

// fails
$data = [
    'a' => 'x',
    'b' => 'bar',
    'c' => true,
    'd' => false,
    'e' => 1,
    'f' => 1,
    'g' => 1,
];

// passes
$data = [
    'a' => 'x',
    'b' => 'bar',
    'c' => true,
    'd' => false,
    'e' => 1,
    'f' => 1,
    'g' => 2,
];

// passes
$data = [
    'a' => 'x',
    'b' => 'x',
    'c' => true,
    'd' => false,
    'e' => 1,
    'f' => 1,
    'g' => 1,
];

// passes
$data = [
    'a' => 'x',
    'b' => 'x',
    'c' => true,
    'd' => true,
    'e' => 1,
    'f' => 1,
    'g' => 1,
];

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Credits

License

The MIT License (MIT). Please see License File for more information.