Skip to content

Repository files navigation

TravisSensioLabs InsightScrutinizer Code QualityCode CoverageDependency Statuslicense

Validation traits

A PHP library/collection of traits aimed to simplify cration of immutable value objects with validation of input value. Basic idea was also inspired by Laravel's Validation trait for Eloquent models and redesign more towards nicolopignatelli/valueobjects

Version 1.0 has less complex attitude on value objects and provide mainly validation via one trait.

Installation

Via Composer

composer require webcore/validation-traits

Example

SingleValueObjectInterface define getter method to retrieve value and method for comparing with another value objects implementing this interface.

interface SingleValueObjectInterface
{
/** * @return mixed */publicfunctiongetValue();
/** * Compare two SingleValueObject and tells whether they can be considered equal * * @param SingleValueObjectInterface $object * @return bool */publicfunctionsameValueAs(SingleValueObjectInterface$object);
}

Let's define simple Token class with 3 rules:

//example/Token.php<?phpclass Token implements SingleValueObjectInterface
{
use SingleValueObjectTrait, NotEmptyTrait, Base64Trait, LengthTrait;
protectedfunctionvalidation($value)
{
$this->validateNotEmpty($value);
$this->validateBase64($value);
$this->validateLength($value, 64);
}
}

And try to create instance of Token with valid and invalid values and compare each other:

//example/example.php<?php//nette/testeruseTester\Assert;
//valid value$value = str_repeat('BeerNowThere0sATemporarySolution', 2);
$tokenFoo = newToken($value);
Assert::same("BeerNowThere0sATemporarySolutionBeerNowThere0sATemporarySolution", $tokenFoo->getValue());
//compare with another object of same value$tokenBar = newToken("BeerNowThere0sATemporarySolutionBeerNowThere0sATemporarySolution");
$areSame = $tokenBar->sameValueAs($tokenFoo);
Assert::true($areSame);
//compare with another object of different value$value = str_repeat('CraftBeerLovers0', 4); //$tokenPub = newToken($value);
Assert::same("CraftBeerLovers0CraftBeerLovers0CraftBeerLovers0CraftBeerLovers0", $tokenPub->getValue());
$areSame = $tokenPub->sameValueAs($tokenBar);
Assert::false($areSame);
//invalid values
Assert::exception(
function () {
newToken(null);
},
InvalidArgumentException::class,
"Token must be not empty"
);
Assert::exception(
function () {
newToken("InvalidTokenLength123456789");
},
InvalidArgumentException::class,
"Token must be 64 characters long"
);
Assert::exception(
function () {
$value = str_repeat('?!@#$%^&', 8);
newToken($value);
},
InvalidArgumentException::class,
"Token must be valid base_64"
);

MIT license

Copyright (c) 2016, Štefan Peťovský

About

PHP validation traits

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages