PHPackages                             guennichi/property-loader - 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. guennichi/property-loader

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

guennichi/property-loader
=========================

PHP library to dynamically load object properties

v2.2.1(5y ago)218MITPHPPHP &gt;=7.4

Since Feb 16Pushed 5y ago1 watchersCompare

[ Source](https://github.com/mradhi/property-loader)[ Packagist](https://packagist.org/packages/guennichi/property-loader)[ Docs](https://guennichi.com)[ RSS](/packages/guennichi-property-loader/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (6)Dependencies (3)Versions (7)Used By (0)

Dynamic Property Loader Library
===============================

[](#dynamic-property-loader-library)

[![Build Status](https://camo.githubusercontent.com/1c4867dbe1c5a551631116498e12316b9ade075bb65f5a3cdf4a406843f85b3c/68747470733a2f2f7472617669732d63692e636f6d2f6d72616468692f70726f70657274792d6c6f616465722e7376673f6272616e63683d6d61696e)](https://travis-ci.com/mradhi/property-loader)[![Coverage Status](https://camo.githubusercontent.com/34363237e5433ea2e557929795cadca2a52fc1034b8e53a8b4dbfc268235f7aa/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6d72616468692f70726f70657274792d6c6f616465722f62616467652e7376673f6272616e63683d6d61696e)](https://coveralls.io/github/mradhi/property-loader?branch=main)

A PHP library to dynamically load object properties using custom handlers (useful for DTO's). It comes with two `ClassMetadata` mapping loaders.

- **StaticMethodLoader**: Load mapping configuration using `configurePropertyLoaderMetadata()` method.
- **AnnotationLoader**: Load mapping configuration using annotations existed on `src/Loaders/` directory

### Installation

[](#installation)

The recommended way to install `property-loader` is using [Composer](https://getcomposer.org/).

```
# Install Composer
$ curl -sS https://getcomposer.org/installer | php
```

Next, run the Composer command to install the latest stable version of `ibanfirst-sdk`.

```
$ composer require guennichi/property-loader
```

After installing, you need to require Composer's autoloader:

```
require 'vendor/autoload.php';
```

### Usage

[](#usage)

The entry point of this library is the `Guennichi\PropertyLoader` class.

```
$mappingLoader = new Guennichi\PropertyLoader\Mapping\Loader\AnnotationLoader(
    new Doctrine\Common\Annotations\AnnotationReader()
);

$propertyLoader = new Guennichi\PropertyLoader\PropertyLoader($mappingLoader);
```

#### Create a Custom Property Loader

[](#create-a-custom-property-loader)

##### Create the Loader

[](#create-the-loader)

You can create a custom loader by extending the base abstract loader class, `Guennichi\PropertyLoader\Loader`. By doing so, you'll be able to manage even how your custom loader will load the property inside a given object.

As an example you're going to create a basic property loader that dynamically generates an email address inside a property for a person object.

```
/**
 * @Annotation
 * @Target("PROPERTY")
 */
class Email extends Guennichi\PropertyLoader\Loader {
    // The source property name
    // Which we will use to generate the email
    // based on it's value.
    public string $source;
}
```

##### Create the Loader Handler

[](#create-the-loader-handler)

As you can see, a loader class is fairly minimal. The actual handler is performed by another “constraint validator” class. The constraint validator class is specified by the constraint’s `handledBy()` method, which has this default logic:

```
// in the base Guennichi\PropertyLoader\Loader class
public function handledBy(): string
{
    return static::class.'Handler';
}
```

In other words, if you create a custom Loader (e.g. `Email`), PropertyLoader library will automatically look for another class, `EmailHandler` when actually performing the loading.

The handler class only has one required method `handle()`, check `guennichi/property-loader-bundle` package for more details about handlers.

##### Using the new Loader

[](#using-the-new-loader)

```
namespace App\DTO;

use App\Loaders as AcmeLoad;

class Person
{
    // ...

    public string $name;

    /**
     * @AcmeLoad\Email(source="name")
     */
    public string $email;
    // ...
}
```

As you can see here, we added the new custom loader inside the Person class, in our case, we want to load the property "email" based on the value of the "name" property.

Now, it's time to see how things are going for our Person object:

```
$person = new Person();
$person->name = 'radhi';

// Load properties based on mappings and stored handlers
$propertyLoader->load($person, function (Email $emailLoader, ExecutionContextInterface $context {
        // Get the sourceProperty reflection object
        // based on "source" (name of property)
        $sourceProperty = $context->getClassMetadata()
        ->getReflectionClass()
        ->getProperty($emailLoader->source);

        $object = $context->getObject();

        $value = $sourceProperty->getValue($object) . '@guennichi.com';

        $context->getPropertyMetadata()->setPropertyValue($value, $object);
});

echo $person->email; // radhi@guennichi.com
```

Supporting PHP &gt;= 7.4
------------------------

[](#supporting-php--74)

This client library only supports PHP version &gt;= 7.4 , Check [Supported Versions](https://www.php.net/supported-versions.php)for more information.

Questions?
----------

[](#questions)

If you have any questions please [open an issue](https://github.com/mradhi/property-loader/issues/new).

License
-------

[](#license)

This library is released under the MIT License. See the bundled [LICENSE](https://github.com/mradhi/property-loader/blob/master/LICENSE) file for details.

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity57

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 ~0 days

Total

6

Last Release

1912d ago

Major Versions

v1.0.0 → v2.0.02021-02-16

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/287419?v=4)[Radhi](/maintainers/Radhi)[@radhi](https://github.com/radhi)

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/guennichi-property-loader/health.svg)

```
[![Health](https://phpackages.com/badges/guennichi-property-loader/health.svg)](https://phpackages.com/packages/guennichi-property-loader)
```

###  Alternatives

[karsonzhang/fastadmin-addons

addons package for fastadmin

28183.5k](/packages/karsonzhang-fastadmin-addons)

PHPackages © 2026

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