PHPackages                             fi1a/hydrator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. fi1a/hydrator

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

fi1a/hydrator
=============

PHP hydrator - это библиотека для переноса данных из массива в объект и из объекта в массив

1.2.1(3y ago)07.8k↑35.7%3MITPHPPHP ^7.3 || ^8

Since Dec 1Pushed 3y ago1 watchersCompare

[ Source](https://github.com/fi1a/hydrator)[ Packagist](https://packagist.org/packages/fi1a/hydrator)[ Docs](https://github.com/fi1a/hydrator)[ RSS](/packages/fi1a-hydrator/feed)WikiDiscussions main Synced yesterday

READMEChangelog (6)Dependencies (5)Versions (9)Used By (3)

PHP hydrator - это библиотека для переноса данных из массива в объект и из объекта в массив
===========================================================================================

[](#php-hydrator---это-библиотека-для-переноса-данных-из-массива-в-объект-и-из-объекта-в-массив)

[![Latest Version](https://camo.githubusercontent.com/44555b440909c2e335531878365cb86b28d607ccdb3d2ad70a41ec5888d33026/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666931612f6879647261746f723f6c6162656c3d72656c65617365)](https://packagist.org/packages/fi1a/hydrator)[![Software License](https://camo.githubusercontent.com/50395d8c1f7e28248b058f9981ca1e5a32b58a0f27c5bf2e0261658ab75f50af/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f666931612f6879647261746f723f7374796c653d666c61742d737175617265)](https://github.com/fi1a/hydrator/blob/master/LICENSE)[![PHP Version](https://camo.githubusercontent.com/b5674f95d70e47fceb50e59ead3c8cf41dd5253b1c4815be572a9bfbc620f3fb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f666931612f6879647261746f723f7374796c653d666c61742d737175617265)](https://php.net)[![Coverage Status](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)[![Total Downloads](https://camo.githubusercontent.com/04e32c3b33ea919cd99cd8c038bb7b0a4a7f7eb5adc08c4101ed3d0718304795/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666931612f6879647261746f722e7376673f7374796c653d666c61742d73717561726526636f6c6f72423d6d656469756d76696f6c6574726564)](https://packagist.org/packages/fi1a/hydrator)[![Support mail](https://camo.githubusercontent.com/116fa0d447870a3a6c6c1f4b296c889707a6e30a69c2b28cbe8d0f6f5c3d4920/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696c2d737570706f7274253430666931612e72752d627269676874677265656e)](mailto:support@fi1a.ru)

Библиотека позволяет переносить данные из массива в объект и обратно.

Возможны следующие операции:

- конвертация данных в `Array` из `Object`;
- заполнить данными `Object` из `Array`.

Установка
---------

[](#установка)

Установить этот пакет можно как зависимость, используя Composer.

```
composer require fi1a/hydrator
```

Hydrator. Перенос данных из массива в объект
--------------------------------------------

[](#hydrator-перенос-данных-из-массива-в-объект)

Класс `Fi1a\Hydrator\Hydrator()` позволяет заполнить данными объект. Пример:

```
use Fi1a\Hydrator\Hydrator;

class Foo {
    /**
     * @var string
     */
    public $propertyBar;

    /**
     * @var int
     */
    protected $propertyBaz;

    /**
     * @var bool
     */
    private $propertyQux;
}

$hydrator = new Hydrator();

/**
 * @var Foo $model
 */
$model = $hydrator->hydrate([
    'propertyBar' => 'value',
    'propertyBaz' => 1,
    'propertyQux' => true,
], Foo::class);

$model->propertyBar; // 'value'
```

Метод `hydrate` создает объект переданного класса, для заполнения данными уже существующего объекта нужно использовать метод `hydrateModel`:

```
use Fi1a\Hydrator\Hydrator;
use Fi1a\Hydrator\Hydrates\Hydrate;

class Foo {
    /**
     * @var string
     */
    public $propertyBar;

    /**
     * @var int
     */
    protected $propertyBaz;

    /**
     * @var bool
     */
    private $propertyQux;
}

$hydrator = new Hydrator();

$model = new Foo();

$hydrator->hydrateModel([
    'propertyBar' => 'value',
    'propertyBaz' => 1,
    'propertyQux' => true,
], $model);

$model->propertyBar; // 'value'
```

### Поведение Fi1a\\Hydrator\\Hydrates\\Hydrate

[](#поведение-fi1ahydratorhydrateshydrate)

Служит для переноса данных из массива в объект без вызова методов сеттеров объекта. Является поведением по умолчанию.

```
use Fi1a\Hydrator\Hydrator;

class Foo {
    /**
     * @var string
     */
    public $propertyBar;

    /**
     * @var int
     */
    protected $propertyBaz;

    /**
     * @var bool
     */
    private $propertyQux;
}

$hydrator = new Hydrator();

/**
 * @var Foo $model
 */
$model = $hydrator->hydrate([
    'propertyBar' => 'value',
    'propertyBaz' => 1,
    'propertyQux' => true,
], Foo::class);

$model->propertyBar; // 'value'
```

### Поведение Fi1a\\Hydrator\\Hydrates\\HydrateCallSetters

[](#поведение-fi1ahydratorhydrateshydratecallsetters)

Служит для переноса данных из массива в объект с вызовом сеттеров.

```
use Fi1a\Hydrator\Hydrator;
use Fi1a\Hydrator\Hydrates\HydrateCallSetters;

class Foo {
    public $propertyBar;

    protected $propertyBaz;

    private $propertyQux;

    protected function setPropertyBaz(int $propertyBaz): void
    {
        $this->propertyBaz = $propertyBaz + 1;
    }

    public function getPropertyBaz(): int
    {
        return $this->propertyBaz;
    }
}

$hydrator = new Hydrator(new HydrateCallSetters());

/**
 * @var Foo $model
 */
$model = $hydrator->hydrate([
    'propertyBar' => 'value',
    'propertyBaz' => 1,
    'propertyQux' => true,
], Foo::class);

$model->getPropertyBaz(); // 2
```

### Поведение Fi1a\\Hydrator\\Hydrates\\HydratePublicCallSetters

[](#поведение-fi1ahydratorhydrateshydratepubliccallsetters)

Служит для переноса данных из массива в объект с вызовом только публичных сеттеров.

```
use Fi1a\Hydrator\Hydrator;
use Fi1a\Hydrator\Hydrates\HydratePublicCallSetters;

class Foo {
    public $propertyBar;

    protected $propertyBaz;

    private $propertyQux;

    public function setPropertyBaz(int $propertyBaz): void
    {
        $this->propertyBaz = $propertyBaz + 2;
    }

    public function getPropertyBaz(): int
    {
        return $this->propertyBaz;
    }
}

$hydrator = new Hydrator(new HydratePublicCallSetters());

/**
 * @var Foo $model
 */
$model = $hydrator->hydrate([
    'propertyBar' => 'value',
    'propertyBaz' => 1,
    'propertyQux' => true,
], Foo::class);

$model->getPropertyBaz(); // 3
```

Extractor. Перенос данных из объекта в массив
---------------------------------------------

[](#extractor-перенос-данных-из-объекта-в-массив)

Класс `Fi1a\Hydrator\Extractor()` осуществляет извлечение данных из объекта в массив. Пример:

```
use Fi1a\Hydrator\Extractor;

class Foo {
    /**
     * @var string
     */
    public $propertyBar = 'value';

    /**
     * @var int
     */
    protected $propertyBaz = 1;

    /**
     * @var bool
     */
    private $propertyQux = true;
}

$model = new Foo();

$hydrator = new Extractor();

$data = $hydrator->extract($model); // ['propertyBar' => 'value',]
```

Можно указать какие свойства нужно извлечь с помощью аргумента `$keys` метода `Fi1a\Hydrator\Extractor::extract`:

```
use Fi1a\Hydrator\Extractor;

class Foo {
    /**
     * @var string
     */
    public $propertyBar = 'value';

    /**
     * @var int
     */
    protected $propertyBaz = 1;

    /**
     * @var bool
     */
    private $propertyQux = true;
}

$model = new Foo();

$hydrator = new Extractor();

$data = $hydrator->extract($model, ['propertyBar', 'propertyBaz']); // ['propertyBar' => 'value', 'propertyBaz' => 1,]
```

### Поведение Fi1a\\Hydrator\\Extracts\\ExtractPublicCallGetters

[](#поведение-fi1ahydratorextractsextractpubliccallgetters)

Осуществляет перенос данных из объекта в массив с вызовом публичных геттеров. Если ключи массива в метод `Fi1a\Hydrator\Extractor::extract` не переданы, будут получены все публичные свойства объекта и свойства, имеющие публичные геттеры, иначе будут получены только переданные свойства. Является поведением по умолчанию.

```
use Fi1a\Hydrator\Extractor;
use Fi1a\Hydrator\Extracts\ExtractPublicCallGetters;

class Foo {
    /**
     * @var string
     */
    public $propertyBar = 'value';

    /**
     * @var int
     */
    protected $propertyBaz = 1;

    /**
     * @var bool
     */
    private $propertyQux = true;

    public function getPropertyBaz(): int
    {
        return $this->propertyBaz;
    }
}

$model = new Foo();

$hydrator = new Extractor(new ExtractPublicCallGetters());

$data = $hydrator->extract($model); // ['propertyBar' => 'value', 'propertyBaz' => 1,]
```

### Поведение Fi1a\\Hydrator\\Extracts\\ExtractCallGetters

[](#поведение-fi1ahydratorextractsextractcallgetters)

Осуществляет перенос данных из объекта в массив с вызовом геттеров. Если ключи массива в метод `Fi1a\Hydrator\Extractor::extract` не переданы, будут получены все свойства объекта и вызваны их геттеры, иначе будут получены только переданные свойства.

```
use Fi1a\Hydrator\Extractor;
use Fi1a\Hydrator\Extracts\ExtractCallGetters;

class Foo {
    /**
     * @var string
     */
    public $propertyBar = 'value';

    /**
     * @var int
     */
    protected $propertyBaz = 1;

    /**
     * @var bool
     */
    private $propertyQux = true;

    public function getPropertyBaz(): int
    {
        return $this->propertyBaz;
    }
}

$model = new Foo();

$hydrator = new Extractor(new ExtractCallGetters());

$data = $hydrator->extract($model); // ['propertyBar' => 'value', 'propertyBaz' => 1, 'propertyQux' => true]
```

### Поведение Fi1a\\Hydrator\\Extracts\\ExtractPublic

[](#поведение-fi1ahydratorextractsextractpublic)

Осуществляет перенос публичных свойств из объекта в массив. Если ключи массива в метод `Fi1a\Hydrator\Extractor::extract` не переданы, будут получены все публичные свойства объекта, иначе будут получены только переданные свойства.

```
use Fi1a\Hydrator\Extractor;
use Fi1a\Hydrator\Extracts\ExtractPublic;

class Foo {
    /**
     * @var string
     */
    public $propertyBar = 'value';

    /**
     * @var int
     */
    protected $propertyBaz = 1;

    /**
     * @var bool
     */
    private $propertyQux = true;

    public function getPropertyBaz(): int
    {
        return $this->propertyBaz;
    }
}

$model = new Foo();

$hydrator = new Extractor(new ExtractPublic());

$data = $hydrator->extract($model); // ['propertyBar' => 'value',]
```

### Поведение Fi1a\\Hydrator\\Extracts\\Extract

[](#поведение-fi1ahydratorextractsextract)

Осуществляет перенос данных из объекта в массив. Если ключи массива в метод `Fi1a\Hydrator\Extractor::extract` не переданы, будут получены все свойства объекта, иначе будут получены только переданные свойства.

```
use Fi1a\Hydrator\Extractor;
use Fi1a\Hydrator\Extracts\Extract;

class Foo {
    /**
     * @var string
     */
    public $propertyBar = 'value';

    /**
     * @var int
     */
    protected $propertyBaz = 1;

    /**
     * @var bool
     */
    private $propertyQux = true;

    public function getPropertyBaz(): int
    {
        return $this->propertyBaz;
    }
}

$model = new Foo();

$hydrator = new Extractor(new Extract());

$data = $hydrator->extract($model); // ['propertyBar' => 'value', 'propertyBaz' => 1, 'propertyQux' => true]
```

Наименование ключей массива
---------------------------

[](#наименование-ключей-массива)

Для определения наименования ключей массива используются классы реализующие интерфейс `Fi1a\Hydrator\KeyName\KeyNameInterface`. Объект данного класса передается в конструктор переноса данных из массива в объект и обратно.

- `Fi1a\Hydrator\KeyName\Camelize` преобразует в "stringHelper" название ключей массива;
- `Fi1a\Hydrator\KeyName\Humanize` преобразует в "string\_helper" название ключей массива;

По умолчанию используется "stringHelper" название ключей массива (`Fi1a\Hydrator\KeyName\Camelize`).

Пример переноса данных из массива в объект с наименованием ключей массива "string\_helper":

```
use Fi1a\Hydrator\Hydrator;
use Fi1a\Hydrator\Hydrates\Hydrate;
use Fi1a\Hydrator\KeyName\Humanize;

class Foo {
    /**
     * @var string
     */
    public $propertyBar;

    /**
     * @var int
     */
    protected $propertyBaz;

    /**
     * @var bool
     */
    private $propertyQux;
}

$hydrator = new Hydrator(new Hydrate(new Humanize()));

$model = new Foo();

$hydrator->hydrateModel([
    'property_bar' => 'value',
    'property_baz' => 1,
    'property_qux' => true,
], $model);

$model->propertyBar; // 'value'
```

Пример переноса данных из объекта в массив с наименованием ключей массива "string\_helper":

```
use Fi1a\Hydrator\Extractor;
use Fi1a\Hydrator\Extracts\Extract;
use Fi1a\Hydrator\KeyName\Humanize;

class Foo {
    /**
     * @var string
     */
    public $propertyBar = 'value';

    /**
     * @var int
     */
    protected $propertyBaz = 1;

    /**
     * @var bool
     */
    private $propertyQux = true;

    public function getPropertyBaz(): int
    {
        return $this->propertyBaz;
    }
}

$model = new Foo();

$hydrator = new Extractor(new Extract(new Humanize()));

$data = $hydrator->extract($model); // ['property_bar' => 'value', 'property_baz' => 1, 'property_qux' => true]
```

###  Health Score

28

—

LowBetter than 52% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity24

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~11 days

Total

8

Last Release

1228d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d4f26c1adaa632741fadf55b1328cbd22ac91282aecfae2027d105df0ddedee4?d=identicon)[fi1a](/maintainers/fi1a)

---

Tags

dtoextractorhydratorphp

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/fi1a-hydrator/health.svg)

```
[![Health](https://phpackages.com/badges/fi1a-hydrator/health.svg)](https://phpackages.com/packages/fi1a-hydrator)
```

###  Alternatives

[serhioromano/bootstrap-calendar

Bootstrap full view calendar.

3.0k5.9k2](/packages/serhioromano-bootstrap-calendar)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
