mordilion / generated-abstract-hydrator
Extension-Library for Ocramius/GeneratedHydrator to use AbstractHydrator for the strategy functionality and recursive hydration
Installs: 9 721
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 3
Forks: 0
Open Issues: 0
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- laminas/laminas-filter: ^2.11
- laminas/laminas-servicemanager: ^3.7
- ocramius/generated-hydrator: ~4.6.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.6
This package is auto-updated.
Last update: 2024-11-11 09:24:32 UTC
README
Installation
composer require mordilion/generated-abstract-hydrator
Examples
Simple
Generator-Method
use GeneratedHydrator\Configuration; use Mordilion\GeneratedAbstractHydrator\ClassGenerator\AbstractHydratorGenerator; use Mordilion\GeneratedAbstractHydrator\Hydrator\PerformantAbstractHydrator; function getClassHydrator(string $class): PerformantAbstractHydrator { $config = new Configuration($class); $config->setHydratorGenerator(new AbstractHydratorGenerator(PerformantAbstractHydrator::class)); $hydratorClass = $config->createFactory()->getHydratorClass(); if (!class_exists($hydratorClass)) { throw new \RuntimeException('Could not create Hydrator!'); } /** @var PerformantAbstractHydrator $hydrator */ $hydrator = new $hydratorClass(); return $hydrator; }
Usage of nested Objects
use Mordilion\GeneratedAbstractHydrator\Strategy\RecursiveHydrationStrategy; use Zend\Hydrator\Strategy\DateTimeFormatterStrategy; class Book { /** * @var string */ public $title; /** * @var DateTime */ public $publishedAt; } class Author { /** * @var string */ public $name; /** * @var string */ public $firstname; /** * @var Book[] */ public $books; } // --- $data = [ 'name' => 'Böll', 'firstname' => 'Heinrich', 'books' => [ ['title' => 'Die schwarzen Schafe', 'publishedAt' => '1951-01-01'], ['title' => 'Wo warst du, Adam?', 'publishedAt' => '1951-01-01'], ['title' => 'Ansichten eines Clowns', 'publishedAt' => '1963-01-01'], ], ]; $bookHydrator = getClassHydrator(Book::class); $bookHydrator->addStrategy('publishedAt', new DateTimeFormatterStrategy('Y-m-d')); $authorHydrator = getClassHydrator(Author::class); $authorHydrator->addStrategy('books', new RecursiveHydrationStrategy(new Book(), $bookHydrator, true)); $object = new Author(); $authorHydrator->hydrate($data, $object); var_dump($object);
output:
class Author#2 (3) {
public $name =>
string(5) "Böll"
public $firstname =>
string(8) "Heinrich"
public $books =>
array(3) {
[0] =>
class Book#4 (2) {
public $title =>
string(20) "Die schwarzen Schafe"
public $publishedAt =>
class DateTime#3841 (3) {
public $date =>
string(26) "1951-01-01 06:17:41.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(3) "UTC"
}
}
[1] =>
class Book#3840 (2) {
public $title =>
string(18) "Wo warst du, Adam?"
public $publishedAt =>
class DateTime#3839 (3) {
public $date =>
string(26) "1951-01-01 06:17:41.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(3) "UTC"
}
}
[2] =>
class Book#3838 (2) {
public $title =>
string(22) "Ansichten eines Clowns"
public $publishedAt =>
class DateTime#3837 (3) {
public $date =>
string(26) "1963-01-01 06:17:41.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(3) "UTC"
}
}
}
}