sedlatschek/laravel-conditional-equals-validation

Additional rules for conditional equals validation
3,221
Install
composer require sedlatschek/laravel-conditional-equals-validation
Latest Version:v1.0.0-beta.7
PHP:^8.1
Laravel:9 · 10
License:MIT
Last Updated:Jul 19, 2023
Links: GitHub  ·  Packagist
Maintainer: sedlatschek

Laravel Conditional Equals Validation

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.

Related Packages

skysplit/laravel5-intl-translation

Laravel 5 package for better translation syntax using php-intl extension

107,780 10
propaganistas/laravel-phone

Adds phone number functionality to Laravel based on Google's libphonenumber API.

46,166,308 3,041
prettus/laravel-validation

Laravel Validation Service

12,126,549 406
proengsoft/laravel-jsvalidation

Validate forms transparently with Javascript reusing your Laravel Validation Rul...

2,488,740 1,140
pixelpeter/laravel5-isocodes-validation

Laravel 5 wrapper for the IsoCodes Validation library from ronanguilloux

88,007 19

Version History

Pre-releases (7)
Version Released PHP Laravel License
v1.0.0-beta.7 ^8.1 ^9.0|^10.0 MIT
v1.0.0-beta.6 ^8.1 ^9.0|^10.0 MIT
v1.0.0-beta.5 ^8.1 ^9.0|^10.0 MIT
v1.0.0-beta.4 ^8.1 ^9.0|^10.0 MIT
v1.0.0-beta.3 ^8.1 ^9.0|^10.0 MIT