aegisora / emptiness-rule-guardian
Emptiness Rule Guardian provides a simple shortcut for emptiness validation using aegisora/guardian and aegisora/emptiness-rule
Package info
github.com/Aegisora/emptiness-rule-guardian
Language:Shell
pkg:composer/aegisora/emptiness-rule-guardian
Requires
- php: >=7.4
- aegisora/emptiness-rule: ^1.0
- aegisora/guardian: ^1.0
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^9.6
- squizlabs/php_codesniffer: ^4.0
README
Emptiness Rule Guardian provides a simple shortcut for emptiness validation using aegisora/guardian and aegisora/emptiness-rule.
It is designed for cases where you want to quickly check whether a value is empty or is not empty, without manually building an EmptyRule / NotEmptyRule and a validation pipeline by hand.
This package is built on top of:
โจ Features
- ๐น Simple shortcut API for
EmptyRuleandNotEmptyRule - ๐น Validates that a value is empty via
checkEmpty() - ๐น Validates that a value is not empty via
checkNotEmpty() - ๐น Works with scalars, arrays and countable objects
- ๐น Uses
aegisora/guardianinternally - ๐น Uses
aegisora/emptiness-ruleinternally - ๐น Supports a custom validation exception
- ๐น Keeps rule execution errors separated from validation errors
- ๐น Fully compatible with the Aegisora ecosystem
- ๐น Ready to use out of the box
๐ฆ Installation
composer require aegisora/emptiness-rule-guardian
๐ Core Concept
This package wraps the common emptiness validation flow:
$guardian->check( $value, EmptyRule::create(), new ValueIsNotEmptyException() ); $guardian->check( $value, NotEmptyRule::create(), new ValueIsEmptyException() );
into a dedicated shortcut class:
$emptinessRuleGuardian->checkEmpty($value, new ValueIsNotEmptyException()); $emptinessRuleGuardian->checkNotEmpty($value, new ValueIsEmptyException());
Instead of manually creating an EmptyRule / NotEmptyRule and passing it to Guardian, you can use EmptinessRuleGuardian directly.
๐๏ธ Basic Usage
use Aegisora\Guardian\Guardian; use Aegisora\Guardian\Exceptions\GuardianValidationException; use Aegisora\RuleGuardians\EmptinessRuleGuardian\EmptinessRuleGuardian; $guardian = new Guardian(); $emptinessRuleGuardian = new EmptinessRuleGuardian($guardian); try { $emptinessRuleGuardian->checkEmpty($value); // $value is empty } catch (GuardianValidationException $exception) { // $value is not empty } try { $emptinessRuleGuardian->checkNotEmpty($value); // $value is not empty } catch (GuardianValidationException $exception) { // $value is empty }
checkEmpty() passes when $value is empty, and fails otherwise.
checkNotEmpty() passes when $value is not empty, and fails otherwise.
โ How the emptiness check works
A value is considered empty when it is null, an empty string, an empty array or an empty countable object.
Every other value โ including 0, 0.0, false and non-countable objects โ is considered not empty:
$emptinessRuleGuardian->checkEmpty(null); // passes (null) $emptinessRuleGuardian->checkEmpty(''); // passes (empty string) $emptinessRuleGuardian->checkEmpty([]); // passes (empty array) $emptinessRuleGuardian->checkEmpty(new ArrayObject([])); // passes (empty countable object) $emptinessRuleGuardian->checkEmpty('foo'); // fails (non-empty string) $emptinessRuleGuardian->checkEmpty([1]); // fails (non-empty array) $emptinessRuleGuardian->checkEmpty(0); // fails (int) $emptinessRuleGuardian->checkEmpty(0.0); // fails (float) $emptinessRuleGuardian->checkEmpty(false); // fails (bool) $emptinessRuleGuardian->checkEmpty(new stdClass()); // fails (non-countable object) $emptinessRuleGuardian->checkEmpty(new ArrayObject([1]));// fails (non-empty countable object) $emptinessRuleGuardian->checkEmpty(static fn () => null);// fails (callable)
checkNotEmpty() is the exact inverse โ it passes for every value listed above as fails and fails for every value listed as passes.
โ ๏ธ A
resourcecannot be evaluated for emptiness. Passing a resource raises aGuardianExecutingRuleException(see below) instead of a validation result.
๐งฉ Usage with Custom Exception
You may provide your own exception for validation failure. It must be the last argument.
use Aegisora\Guardian\Guardian; use Aegisora\RuleGuardians\EmptinessRuleGuardian\EmptinessRuleGuardian; use App\Exceptions\ValueIsEmptyException; $guardian = new Guardian(); $emptinessRuleGuardian = new EmptinessRuleGuardian($guardian); $emptinessRuleGuardian->checkNotEmpty( $value, new ValueIsEmptyException() );
If the value is empty, the provided exception will be thrown instead of GuardianValidationException.
This is useful when validation errors should have domain-specific meaning.
๐งช Example in Application Service
use Aegisora\RuleGuardians\EmptinessRuleGuardian\EmptinessRuleGuardian; use App\Exceptions\EmptyPayloadException; final class PayloadProcessor { private EmptinessRuleGuardian $emptinessRuleGuardian; public function __construct( EmptinessRuleGuardian $emptinessRuleGuardian ) { $this->emptinessRuleGuardian = $emptinessRuleGuardian; } /** * @param mixed $payload */ public function process($payload): void { $this->emptinessRuleGuardian->checkNotEmpty( $payload, new EmptyPayloadException() ); // business logic for processing a non-empty payload } }
๐จ Exceptions
The package raises validation-related exceptions, all delegated to Guardian (the outcome of running the rule):
GuardianValidationException
Thrown when validation fails and no custom exception is provided.
The rule code for a failed checkEmpty() is empty_rule, and for a failed checkNotEmpty() it is not_empty_rule.
use Aegisora\Guardian\Exceptions\GuardianValidationException; try { $emptinessRuleGuardian->checkEmpty($value); } catch (GuardianValidationException $exception) { echo $exception->getRuleCode(); // "empty_rule" } try { $emptinessRuleGuardian->checkNotEmpty($value); } catch (GuardianValidationException $exception) { echo $exception->getRuleCode(); // "not_empty_rule" }
Custom exception
When a custom exception is passed as the last argument, it is thrown instead of GuardianValidationException on validation failure.
use App\Exceptions\ValueIsEmptyException; try { $emptinessRuleGuardian->checkNotEmpty($value, new ValueIsEmptyException()); } catch (ValueIsEmptyException $exception) { // domain-specific handling }
GuardianExecutingRuleException
Thrown when the underlying rule fails to execute (raises a RuleException during validation), as opposed to simply reporting an invalid result.
Emptiness cannot be determined for a resource, so passing a resource surfaces this exception instead of a validation result:
use Aegisora\Guardian\Exceptions\GuardianExecutingRuleException; try { $emptinessRuleGuardian->checkEmpty(tmpfile()); } catch (GuardianExecutingRuleException $exception) { // the rule could not be executed }
๐งฉ API
EmptinessRuleGuardian::checkEmpty()
/** * @param mixed $value * @throws GuardianExecutingRuleException * @throws GuardianValidationException * @throws \Throwable */ public function checkEmpty($value, ?\Throwable $exception = null): void
Validates that $value is empty.
EmptinessRuleGuardian::checkNotEmpty()
/** * @param mixed $value * @throws GuardianExecutingRuleException * @throws GuardianValidationException * @throws \Throwable */ public function checkNotEmpty($value, ?\Throwable $exception = null): void
Validates that $value is not empty.
Arguments (both methods):
$valueโ the value to validate$exceptionโ an optional custom\Throwableto be thrown on validation failure
The methods return void. They communicate results through exceptions only โ they return nothing on success and throw on failure:
GuardianValidationExceptionโ the emptiness check failed and no custom exception was provided- the provided custom exception โ the check failed and a custom exception was passed
GuardianExecutingRuleExceptionโ the rule could not be executed
๐๏ธ Architecture
This package is a small shortcut layer over the Aegisora validation pipeline.
Flow:
EmptinessRuleGuardian::checkEmpty()/checkNotEmpty()is called with a value and an optional exception- An
EmptyRule/NotEmptyRuleis created (create()) Guardianexecutes the rule against the value- If the check passes, execution continues normally
- If the check fails, the custom exception or
GuardianValidationExceptionis thrown - If the rule could not be executed,
GuardianExecutingRuleExceptionis thrown
Internal flow:
value โ EmptinessRuleGuardian โ Guardian โ EmptyRule / NotEmptyRule โ Result โ Exception
๐ Related Packages
- aegisora/guardian โ validation execution orchestrator
- aegisora/emptiness-rule โ empty and not empty rules
- aegisora/rule-contract โ base rule contract and validation result architecture
โ๏ธ License
This package is open-source and licensed under the MIT License. See the LICENSE for details.
๐ฑ Contributing
Contributions are welcome and greatly appreciated!. See the CONTRIBUTING for details.
๐ Support
If you find this project useful, please consider giving it a star on GitHub!
It helps the project grow and motivates further development.