2017 © Pedro Peláez
 

library doctrine-hydration

image

webchemistry/doctrine-hydration

  • Thursday, July 5, 2018
  • by Antik
  • Repository
  • 1 Watchers
  • 0 Stars
  • 1 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

, (*1)

, (*2)

Website 🚀 contributte.org | Contact 👨🏻‍💻 f3l1x.io | Twitter 🐦 @contributte , (*3)

Disclaimer

:warning: This project is no longer being maintained.
Composer nettrine/hydrator
Version
PHP
License

Usage

Nette installation

extensions:
    hydrator: Nettrine\Hydrator\DI\HydratorExtension

Basic usage

$entity = $hydrator->toFields(Entity::class, [
    'name' => 'foo',
    'field' => 'value',
]);

$entity = $hydrator->toFields($entityObj, [
    'name' => 'foo',
    'field' => 'value',
]);

Entity to an array

$array = $hydrator->toArray($entity);

Custom ArrayAccessor

Used to read from or write to an object's property., (*4)

class CustomPropertyAccessor implements IPropertyAccessor {

    public function get(object $object, string $property) { ... }

    public function set(object $object, string $property, $value): void { ... }

}

Nette registration:, (*5)

hydrator:
    propertyAccessor: CustomPropertyAccessor

Adapters

Do you have custom rules of getting or setting an object's value? The existing features don't suit your needs? Adapters can be used to extend the functionality., (*6)

All the adapters have to be registered via addFieldAdapter or addArrayAdapter methods., (*7)

In Nette:, (*8)

hydrator:
    adapters:
        fields:
            - Nettrine\DoctrineHydration\Adapters\CallbackFieldAdapter
            - Nettrine\DoctrineHydration\Adapters\TargetEntityFieldAdapter
        array:
            - Nettrine\DoctrineHydration\Adapters\JoinArrayAdapter
            - Nettrine\DoctrineHydration\Adapters\ManyToOneAdapter

ArrayAdapter

IArrayAdapter interface is implemented. Built-in adapters:, (*9)

ManyToOneArrayAdapter

All object relations are converted to an ID., (*10)

$entity = new Assoc class {
    public $id = 42;

    public $foo = 'foo';

    /**
     * @ManyToOne(targetEntity="Assoc")
     */
    public $assoc;
};

$entity->assoc->id++;

$array = $hydrator->toArray($entity);

$array === [
    'id' => 42,
    'assoc' => 43,
];
JoinArrayAdapter

Object association is converted to an array., (*11)

$entity = new Assoc class {
    public $id = 42;

    public $foo = 'foo';

    /**
     * @ManyToOne(targetEntity="Assoc")
     */
    public $assoc;
};

$entity->assoc->id++;

$array = $hydrator->toArray($entity, [
    'joins' => [
        'assoc' => 'foo'
    ]
]);

$array === [
    'id' => 42,
    'assoc' => 'foo',
];

FieldAdapter

IFieldAdapter interface is implemented. Built-in adapters:, (*12)

CallbackFieldAdapter

A callback can be used:, (*13)

$hydrator->toFields($obj, [
    'name' => 'foo',
], [
    'callbacks' => [
        'name' => function (FieldArgs $args) {
            $args->value = ucfirst($args->value);
        },
    ] 
]);

The value of the $name property is now Foo., (*14)

TargetEntityFieldAdapter

In case of an association the corresponding entity will be found:, (*15)

$hydrator->toFields($obj, [
    'assoc' => 42, // Item with the value of 42 will be found
]);

Creating a custom adapter

Say we have the following image custom type annotation:, (*16)

/**
 * @ORM\Column(type="image")
 */

and we want to automatically save the image during hydration:, (*17)


class CustomFieldAdapter implements IFieldAdapter { public function __construct(IImageStorage $storage) { ... } public function isWorkable(FieldArgs $args): bool { // Apply only when the type is `image` and it is not an assocation return !$args->metadata->isAssociation($field) && $args->metadata->getFieldMapping($field)['type'] === 'image'; } public function work(FieldArgs $args): void { $image = new Image($value); if ($args->hasSettingsSection('images')) { $image->setName($args->getSettingsSection('images')); } $this->storage->save($image); $args->value = $image; } }

Registration in Nette:, (*18)

hydrator:
    adapters:
        fields: 
            - CustomFieldAdapter

Usage:, (*19)

$hydrator->toFields($obj, [
    'avatar' => __DIR__ . '/avatar.png',
], [
    'images' => [
        'avatar' => 'foo.png',
    ]
]);

Development

This package was maintain by these authors., (*20)

, (*21)

, (*22)

, (*23)


Consider to support contributte development team. Also thank you for being used this package., (*24)

The Versions

05/07 2018

dev-master

9999999-dev

  Sources   Download

The Requires