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.
Via Composer
composer require webcore/validation-traits
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"
);Copyright (c) 2016, Štefan Peťovský
