• Stars
    star
    116
  • Rank 302,970 (Top 6 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 8 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Allows extracting data from objects and getting objects from data

Hydrator

Hydrator can be used for two purposes:

  • To extract data from a class to be further stored in a persistent storage.
  • To fill an object with data or create a new instance of a class filled with data.

In both cases it is saving and filling protected and private properties without calling any methods which leads to ability to persist state of an object with properly encapsulated data.

Latest Stable Version Total Downloads Build Status

Installation

The preferred way to install this package is through composer.

composer require --prefer-dist samdark/hydrator

Usage

Consider we have a Post entity which represents a blog post. It has a title and a text. A unique id is generated to identify it.

class Post
{
    private $id;
    protected $title;
    protected $text;

    public function __construct($title, $text)
    {
        $this->id = uniqid('post_', true);
        $this->title = $title;
        $this->text = $text;
    }
   
    public function getId()
    {
        return $this->id;
    }
    
    public function getTitle()
    {
        return $this->title;
    }
    
    public function setTitle($title)
    {
        $this->title = $title;
    }
    
    public function getText()
    {
        return $this->text;
    }
    
    public function setText()
    {
        return $this->text;
    }
}

Saving a post to database:

$post = new Post('First post', 'Hell, it is a first post.');

$postHydrator = new \samdark\hydrator\Hydrator([
    'id' => 'id',
    'title' => 'title',
    'text' => 'text',
]);

$data = $postHydrator->extract($post);
save_to_database($data);

Loading post from database:

<?php
$data = load_from_database();

$postHydrator = new \samdark\hydrator\Hydrator([
    'id' => 'id',
    'title' => 'title',
    'text' => 'text',
]);

$post = $postHydrator->hydrate($data, Post::class);
echo $post->getId();

Filling existing post object with data:

$data = load_from_database();

$postHydrator = new \samdark\hydrator\Hydrator([
    'title' => 'title',
    'text' => 'text',
]);

$post = get_post();
$post = $postHydrator->hydrateInto($data, $post);
echo $post->getTitle();

More Repositories

1

yii2-cookbook

Yii 2.0 Community Cookbook
Makefile
1,439
star
2

sitemap

Sitemap and sitemap index builder
PHP
525
star
3

yii2-shop

Example project implementing simple shop using Yii 2.0
PHP
456
star
4

the-modal

Proper modal boxes
JavaScript
307
star
5

opensource-hate

Hate in OpenSource
281
star
6

yii2-webshell

Web shell allows to run yii console commands using a browser
PHP
225
star
7

php-fpm_tuner

A script to tune PHP-FPM
PHP
160
star
8

yii2-minimal

Yii 2 minimal application template
PHP
139
star
9

intellij-visual-studio-code-dark-plus

Visual Studio Code Dark Plus theme for JetBrains IDEs
135
star
10

yiifeed

Pre-moderated news aggregator
CSS
103
star
11

Typograph

Класс для автоматического применения правил русской типографики для веб
PHP
100
star
12

Yeeki

Yii 1.1-based wiki
PHP
96
star
13

yiipowered

Yii powered websites showcase
PHP
91
star
14

yiiframework_ru_cookbook

Russian Yii 1.1 cookbook
85
star
15

yii-application-cookbook-2nd-edition-code

Code of the second edition of Yii Application Development Cookbook
PHP
82
star
16

yii2-psr-log-target

Yii 2.0 log target that is able to write messages to PSR-3 compatible logger
PHP
80
star
17

realpath_cache_tuner

Simple script that helps tuning PHP realpath cache
PHP
77
star
18

wnmp-dev

Development environment: Windows + nginx + MySQL + PHP
Batchfile
52
star
19

yiiframework-ru

yiiframework.ru
PHP
52
star
20

codemirror-autosuggest

CodeMirror autosuggest addon
JavaScript
47
star
21

intl-icu-data-tables

PHP intl extension, ICU data tables
PHP
37
star
22

codemirror-buttons

CodeMirror buttons addon
JavaScript
31
star
23

yii-jobs

A module and an application for Yii that provides a job-portal-like functionality
PHP
29
star
24

yii2-league-oauth2-server

Yii 2.0 implementation of PHP league OAuth2 server interfaces
PHP
28
star
25

slides

Alexander Makarov conference slides
HTML
26
star
26

a-guide-to-yii-grids-lists-and-data-providers

A guide to Yii framework grids, lists and data providers
25
star
27

yii-db-profiler

Yii profiler adjusted to deal with MySQL performance optimizations
PHP
24
star
28

icls-vs-code-dark-plus

Visual Studio Code Dark Plus-like color scheme for PhpStorm and other JetBrains IDEs
23
star
29

yii-fullajax

fullajax Yii playground
PHP
21
star
30

sack

This package implements "0-1 Knapsack Problem" algorithm i.e. allows to find the best way to fill a knapsack of a specified volume with items of a certain volume and value.
PHP
9
star
31

samdark

8
star
32

yii2-iconized-menu-widget

Menu with favicons for each item.
PHP
8
star
33

yiiframework-ru-phpbb-style

yiiframework.ru phpBB forum style
CSS
7
star
34

markdownru

markdown.ru website
PHP
7
star
35

github-actions-cookbook

7
star
36

opera-xdebug

Opera Xdebug extension
JavaScript
5
star
37

dotfiles

Various configs
Shell
4
star
38

yiifeed-redesign

HTML
4
star
39

samdark.github.io_source

Alexander Makarov English blog
HTML
3
star
40

arguments

Helps deciding A vs B
JavaScript
1
star
41

opencollective-calculator

Various calculations on exported OpenCollective CSV
PHP
1
star
42

phpunit_runInSeparateProcess_bug

PHP
1
star
43

samdark.github.io

HTML
1
star
44

yiipress

Blog / publishing engine powered by Yii3
PHP
1
star
45

plain_to_amnezia

Plain text domains list to AmneziaVPN converter
PHP
1
star