1. Go to this page and download the library: Download aedart/dto library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
aedart / dto example snippets
use Aedart\DTO\Contracts\DataTransferObject as DataTransferObjectInterface;
interface PersonInterface extends DataTransferObjectInterface
{
/**
* Set the person's name
*
* @param string|null $name
*/
public function setName(?string $name);
/**
* Get the person's name
*
* @return string
*/
public function getName() : ?string;
/**
* Set the person's age
*
* @param int $age
*/
public function setAge(?int $age);
/**
* Get the person's age
*
* @return int
*/
public function getAge() : ?int;
}
declare(strict_types=1);
use Aedart\DTO\DataTransferObject;
class Person extends DataTransferObject implements PersonInterface
{
protected $name = '';
protected $age = 0;
/**
* Set the person's name
*
* @param string $name
*/
public function setName(?string $name)
{
$this->name = $name;
}
/**
* Get the person's name
*
* @return string
*/
public function getName() : ?string
{
return $this->name;
}
/**
* Set the person's age
*
* @param int $age
*/
public function setAge(?int $age)
{
$this->age = $age;
}
/**
* Get the person's age
*
* @return int
*/
public function getAge() : ?int
{
return $this->age;
}
}
// Create a new instance of your DTO
$person = new Person();
// Name can be set using normal setter methods
$person->setName('John');
// But you can also just set the property itself
$person->name = 'Jack'; // Will automatically invoke setName()
// And you can also set it, using an array-accessor
$person['name'] = 'Jane'; // Will also automatically invoke setName()
// ... //
// Obtain age using the regular getter method
$age = $person->getAge();
// Can also get it via invoking the property directly
$age = $person->age; // Will automatically invoke getAge()
// Lastly, it can also be access via an array-accessor
$age = $person['age']; // Also invokes the getAge()
// property-name => value array
$data = [
'name' => 'Timmy Jones',
'age' => 32
];
// Create instance and invoke populate
$person = new Person();
$person->populate($data); // setName() and setAge() are invoked with the given values
// property-name => value array
$data = [
'name' => 'Carmen Rock',
'age' => 25
];
// Create instance and invoke populate
$person = new Person($data); // invokes populate(...), which then invokes the setter methods
// Provided that you have a populated instance, you can export those properties to an array
$properties = $person->toArray();
var_dump($properties); // Will output a "property-name => value" list
// Example:
// [
// 'name' => 'Timmy'
// 'age' => 16
// ]
$person = new Person([
'name' => 'Rian Dou',
'age' => 29
]);
echo $person->toJson(); // The same as invoking json_encode($person);
use Aedart\DTO\Providers\Bootstrap;
// Invoke the bootstrap's boot method, before using any DTOs
// Ideally, this should happen along side your application other bootstrapping logic
Bootstrap::boot(); // A default service container is now available
declare(strict_types=1);
use Aedart\DTO\DataTransferObject;
// None-interfaced DTO class is on purpose for this example
class Address extends DataTransferObject
{
protected $street = '';
/**
* Set the street
*
* @param string $street
*/
public function setStreet(?string $street)
{
$this->street = $street;
}
/**
* Get the street
*
* @return string
*/
public function getStreet() : ?string
{
return $this->street;
}
}
// You Person DTO now accepts an address object
class Person extends DataTransferObject implements PersonInterface
{
protected $name = '';
protected $age = 0;
protected $address = null;
// ... getters and setters for name and age not shown ... //
/**
* Set the address
*
* @param Address $address
*/
public function setAddress(?Address $address)
{
$this->address = $address;
}
/**
* Get the address
*
* @return Address
*/
public function getAddress() : ?Address
{
return $this->address;
}
}
// ... some place else, in your application ... //
// Data for your Person DTO
$data = [
'name' => 'Arial Jackson',
'age' => 42,
// Notice that we are NOT passing in an instance of Address, but an array instead!
'address' => [
'street' => 'Somewhere str. 44'
]
];
$person = new Person($data);
$address = $person->getAddress(); // Instance of Address - Will automatically be resolved (if possible).
// Somewhere in your application's bootstrapping logic
use Aedart\DTO\Providers\Bootstrap;
// Boot up the service container
Bootstrap::boot();
// Register / bind your interfaces to concrete instances
Bootstrap::getContainer()->bind(CityInterface::class, function($app){
return new City();
});
// ... somewhere inside your service provider
// Register / bind your interfaces to concrete instances
$this->app->bind(CityInterface::class, function($app){
return new City();
});
use Aedart\DTO\Contracts\DataTransferObject as DataTransferObjectInterface;
use Aedart\DTO\DataTransferObject;
// Interface for a City
interface CityInterface extends DataTransferObjectInterface
{
/**
* Set the city's name
*
* @param string $name
*/
public function setName(string $name) : void;
/**
* Get the city's name
*
* @return string
*/
public function getName() : string;
}
// Concrete implementation of City
class City extends DataTransferObject implements CityInterface
{
protected $name = '';
// ... getter and setter implementation not shown ... //
}
// Address class now also accepts a city property, of the type CityInterface
class Address extends DataTransferObject
{
protected $street = '';
protected $city = null;
// ... street getter and setter implementation not shown ... //
/**
* Set the city
*
* @param CityInterface $address
*/
public function setCity(?CityInterface $city)
{
$this->city = $city;
}
/**
* Get the city
*
* @return CityInterface
*/
public function getCity() : ?CityInterface
{
return $this->city;
}
}
// ... some other place in your application ... //
$addressData = [
'street' => 'Marshall Street 27',
'city' => [
'name' => 'Lincoln'
]
];
// Create new instance and populate
$address = new Address($addressData); // Will attempt to automatically resolve the expected city property,
// of the CityInterface type, by creating a concrete City, using
// the service container, and resolve the bound interface instance
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.