Download the PHP package phpexperts/simple-dto without Composer
On this page you can find all versions of the php package phpexperts/simple-dto. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download phpexperts/simple-dto
More information about phpexperts/simple-dto
Files in phpexperts/simple-dto
Package simple-dto
Short Description A quick and easy DTO package.
License MIT
Homepage https://www.phpexperts.pro/
Informations about the package simple-dto
SimpleDTO
SimpleDTO is a PHP Experts, Inc., Project meant to facilitate easy Data Transfer Objects.
Basically, any protected property on the DTO can be set as an array element passed in to the __constructor and/or as a default value on the property itself.
The DTOs are immutable: Once created, they cannot be changed. Create a new object instead.
Installation
Via Composer
Usage
As of version 2, you must define class-level @property docblocks for each one of your properties.
You also must define the data type.
Fuzzy Data Types
But what if you aren't ready / able to dive into strict PHP data types yet?
Well, just instantiate the parent class like this:
WriteOnce DTOs
Sometimes, you may need to initialize one or more values of a DTO after it has been created. This is particularly common for stateful DTOs via multiple round-trips in certain APIs (particularly Zuora's).
To overcome the stateless nature of traditional Data Type Objects, you can use the WriteOnce
trait.
This will enable you to initialize a DTO with null and uninitialized properties, and set them once and only.
Also, you must set every property before you can serialize or json_encode()
the object, send it to toArray()
, etc.
Ignore certain protected properties.
If you are using PHP 8.0 and above, you can have SimpleDTO ignore any particular protected
property (PHP will treat it
like any regular protected property) using the #[IgnoreAsDTO]
Attribute:
NestedDTOs
You can nest DTOs inside of each other.
Use cases
PHPExperts\SimpleDTO\SimpleDTO
✔ Properties are set via the constructor
✔ Properties are accessed as public properties
✔ Constructor assigns default values of typed properties
✔ Public, private and static protected properties will be ignored
✔ Each DTO is immutable
✔ Setting any property returns an exception
✔ Concrete properties can be used to set default values
✔ Properties with the type carbon become carbon dates
✔ Can easily output to array
✔ Can easily be JSON encoded
✔ Can easily be JSON decoded
✔ Nullable properties are allowed
✔ Every property is nullable with permissive mode
✔ Can be serialized
✔ Can be unserialized
✔ Extra validation can be added
✔ Can get the internal data
✔ Can identify if it is permissive or not
✔ Can ignore protected properties with the #[IgnoreDTO] Attribute.
PHPExperts\SimpleDTO\NestedDTO
✔ Will construct nested DTOs
✔ Can construct arrays of nested DTOs
✔ Can retrieve the stored DTOs.
✔ Will convert array data into the appropriate Nested DTOs
✔ Will convert stdClasses into the appropriate Nested DTOs
✔ Nested DTOs use Loose typing
✔ Nested DTOs can be built using Typed Properties
✔ Nested DTOs with Typed Properties use Strict typing
✔ All registered Nested DTOs are required
✔ Optional, unregistered, Nested DTOs are handled gracefully
✔ Can be serialized
✔ Can be unserialized
✔ Can validate the DTO manually
✔ Can get the internal data
PHPExperts\SimpleDTO\WriteOnceTrait
✔ Can accept null values
✔ Can be serialized
✔ Will validate on serialize
✔ Will validate on to array
✔ Can write each null value once
✔ Write-Once values must validate
SimpleDTO Sad Paths
✔ Cannot initialize with a nonexisting property
✔ Accessing a nonexisting property throws an error
✔ A DTO must have class property docblocks -or- typehint for each concrete property
✔ Carbon date strings must be parsable dates
✔ Properties must match their data types
✔ Will not unserialize DTOs with invalid data
✔ Cannot overwrite a non-existing property
Testing
Contributors
Theodore R. Smith [email protected]
GPG Fingerprint: 4BF8 2613 1C34 87AC D28F 2AD8 EB24 A91D D612 5690
CEO: PHP Experts, Inc.
License
MIT license. Please see the license file for more information.
All versions of simple-dto with dependencies
ext-json Version *
nesbot/carbon Version 2.*|3.*
phpexperts/datatype-validator Version ^1.5