Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork17
A bunch of general-purpose value objects you can use in your Laravel application.
License
michael-rubel/laravel-value-objects
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A bunch of general-purpose value objects you can use in your Laravel application.
The package requiresPHP 8.1 or higher andLaravel 10 or higher.
Install the package using composer:
composer require michael-rubel/laravel-value-objects
You can generate custom value objects with Artisan command:
php artisan make:value-object YourNameValueObject
$bool =newBoolean('1');$bool = Boolean::make('1');$bool = Boolean::from('1');$bool->value();// true(string)$bool;// 'true'$bool->toArray();// ['true']
$number =newNumber('10.20999', scale:2);$number = Number::make('10.20999', scale:2);$number = Number::from('10.20999', scale:2);$number->value();// '10.20'(string)$number;// '10.20'$number->toArray();// ['10.20']// Starting from version `3.5.0` also// accepts locale-formatted numbers:$number =newNumber('1.230,00');$number->value();// '1230.00'$number =newNumber('1,230.00');$number->value();// '1230.00'$number =newNumber('1 230,00');$number->value();// '1230.00'$number =newNumber('1 230.00');$number->value();// '1230.00'
$text =newText('Lorem Ipsum is simply dummy text.');$text = Text::make('Lorem Ipsum is simply dummy text.');$text = Text::from('Lorem Ipsum is simply dummy text.');$text->value();// 'Lorem Ipsum is simply dummy text.'(string)$text;// 'Lorem Ipsum is simply dummy text.'$text->toArray();// ['Lorem Ipsum is simply dummy text.']
$classString =newClassString('\Exception');$classString = ClassString::make('\Exception');$classString = ClassString::from('\Exception');$classString->value();// '\Exception'(string)$classString;// '\Exception'$classString->toArray();// ['\Exception']$classString->classExists();// true$classString->interfaceExists();// false$classString->instantiate();// Exception { ... }$classString->instantiateWith(['message' =>'My message.']);// Exception { #message: "test" ... }
$email =newEmail('michael@laravel.software');$email = Email::make('michael@laravel.software');$email = Email::from('michael@laravel.software');$email->value();// 'michael@laravel.software'(string)$email;// 'michael@laravel.software'$email->toArray();// ['email' => 'michael@laravel.software', 'username' => 'michael', 'domain' => 'laravel.software']
$name =newFullName(' Taylor Otwell');$name = FullName::make(' Taylor Otwell');$name = FullName::from(' Taylor Otwell');$name->value();// 'Taylor Otwell'(string)$name;// 'Taylor Otwell'$name->fullName();// 'Taylor Otwell'$name->firstName();// 'Taylor'$name->lastName();// 'Otwell'$name ='Richard Le Poidevin';$fullName =newFullName($name, limit:2);$fullName->toArray();// array:3 [// "fullName" => "Richard Le Poidevin"// "firstName" => "Richard"// "lastName" => "Le Poidevin"// ]
$name =newName(' Company name!');$name = Name::make(' Company name!');$name = Name::from(' Company name!');$name->value();// 'Company name!'(string)$name;// 'Company name!'$name->toArray();// ['Company name!']
$phone =newPhone(' +38 000 000 00 00');$phone = Phone::make(' +38 000 000 00 00');$phone = Phone::from(' +38 000 000 00 00');$phone->value();// '+38 000 000 00 00'(string)$phone;// '+38 000 000 00 00'$phone->toArray();// ['+38 000 000 00 00']$phone->sanitized();// '+380000000000'
$taxNumber =newTaxNumber('0123456789','PL');$taxNumber = TaxNumber::make('0123456789','PL');$taxNumber = TaxNumber::from('0123456789','PL');$taxNumber->value();// 'PL0123456789'(string)$taxNumber;// 'PL0123456789'$taxNumber->toArray();// ['fullTaxNumber' => 'PL0123456789', 'taxNumber' => '0123456789', 'prefix' => 'PL']$taxNumber->fullTaxNumber();// 'PL0123456789'$taxNumber->taxNumber();// '0123456789'$taxNumber->prefix();// 'PL'
$uuid =newUrl('my-blog-page');$uuid = Url::make('my-blog-page');$uuid = Url::from('my-blog-page');$uuid->value();// 'https://example.com/my-blog-page'(string)$uuid;// 'https://example.com/my-blog-page'$uuid->toArray();// ['https://example.com/my-blog-page']
$uuid =newUuid('8547d10c-7a37-492a-8d33-be0e5ae6119b','Optional name');$uuid = Uuid::make('8547d10c-7a37-492a-8d33-be0e5ae6119b','Optional name');$uuid = Uuid::from('8547d10c-7a37-492a-8d33-be0e5ae6119b','Optional name');$uuid->value();// '8547d10c-7a37-492a-8d33-be0e5ae6119b'(string)$uuid;// '8547d10c-7a37-492a-8d33-be0e5ae6119b'$uuid->toArray();// ['name' => 'Optional name', 'value' => '8547d10c-7a37-492a-8d33-be0e5ae6119b']$uuid->uuid();// '8547d10c-7a37-492a-8d33-be0e5ae6119b'$uuid->name();// 'Optional name'
If you want to avoid try/catching your value object when the validation fails, you can usemakeOrNull method:
$bool = Boolean::makeOrNull('bad input');// null$bool?->value();// null
All value objects areMacroable.This way you can add new methods dynamically. If you need to extend existing methods, you can create a value object locally withmake:value-object command and use inheritance.
For example:
ValueObject::macro('str',function () {returnstr($this->value());});$name =newText('Lorem ipsum');$name->str()->is('Lorem ipsum');// true
Value objects utilize aConditionable trait.You can usewhen andunless methods.
TaxNumber::from('PL0123456789')->when(function ($number) {return$number->prefix() !==null;})->prefix();
If you see any way we can improve the package, or maybe you want to make your own custom value object as built-in, PRs are welcome.
composertestThe MIT License (MIT). Please seeLicense File for more information.
About
A bunch of general-purpose value objects you can use in your Laravel application.
Topics
Resources
License
Contributing
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors7
Uh oh!
There was an error while loading.Please reload this page.
