PHPackages                             sylarele/object-metadata-mapper - 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. sylarele/object-metadata-mapper

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

sylarele/object-metadata-mapper
===============================

v0.3.3(3w ago)01.5k[2 issues](https://github.com/sylarele/object-metadata-mapper/issues)[2 PRs](https://github.com/sylarele/object-metadata-mapper/pulls)MITPHPPHP ^8.3|^8.4|^8.5CI passing

Since Feb 12Pushed 2w ago4 watchersCompare

[ Source](https://github.com/sylarele/object-metadata-mapper)[ Packagist](https://packagist.org/packages/sylarele/object-metadata-mapper)[ RSS](/packages/sylarele-object-metadata-mapper/feed)WikiDiscussions master Synced today

READMEChangelog (8)Dependencies (23)Versions (20)Used By (0)

object-metadata-mapper
======================

[](#object-metadata-mapper)

[![License](https://camo.githubusercontent.com/6ec2ac91fe5792ae7b7f4b443a0759f2b9be4f24057bb75a6570ece56f5a6d00/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f73796c6172656c652f6f626a6563742d6d657461646174612d6d61707065722e737667)](https://github.com/sylarele/object-metadata-mapper/blob/main/LICENSE "LICENSE")[![Packagist Dependency Version](https://camo.githubusercontent.com/4b0efd7312a18265e5eb6c54b062866d042be7f8d0ef62b15203db3a4d9455e4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f73796c6172656c652f6f626a6563742d6d657461646174612d6d61707065722f706870)](https://camo.githubusercontent.com/4b0efd7312a18265e5eb6c54b062866d042be7f8d0ef62b15203db3a4d9455e4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f73796c6172656c652f6f626a6563742d6d657461646174612d6d61707065722f706870)[![Packagist Downloads](https://camo.githubusercontent.com/c12e3dfacd391fabe261dedd81e7245a2ddcd9d24f1d9b7990bbdd9103cecfcf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646d2f73796c6172656c652f6f626a6563742d6d657461646174612d6d6170706572)](https://packagist.org/packages/sylarele/object-metadata-mapper "Packagist")

A PHP library for describing metadata and fake data on classes via **PHP attributes**, then querying them through a generic service.

Installation
------------

[](#installation)

```
composer require sylarele/object-metadata-mapper
```

How it works
------------

[](#how-it-works)

**Annotate a class** with `Mapper` attributes to describe its structure and fake values. **Implement `MetadataService`** to resolve which class corresponds to a key (a `BackedEnum`). **Call `findByKey()`** to get a `MetadataDto` containing the descriptions and fake data.

Annotating a class
------------------

[](#annotating-a-class)

Each attribute takes a `key` (field name) and an optional `description`.

```
use Sylarele\ObjectMetadataMapper\Attributes\ObjectMapper;
use Sylarele\ObjectMetadataMapper\Attributes\FullNameMapper;
use Sylarele\ObjectMetadataMapper\Attributes\EmailMapper;
use Sylarele\ObjectMetadataMapper\Attributes\PhoneMapper;
use Sylarele\ObjectMetadataMapper\Attributes\ObjectEachMapper;
use Sylarele\ObjectMetadataMapper\Attributes\AddressMapper;

#[ObjectMapper(
    'user',
    new FullNameMapper('fullname'),
    new PhoneMapper('phone'),
    new EmailMapper('email'),
    new ObjectEachMapper(
        'addresses',
        2,
        new AddressMapper('address'),
    )
)]
class UserObject
{
}
```

Implementing MetadataService
----------------------------

[](#implementing-metadataservice)

Create a `BackedEnum` as a key, then extend `MetadataService` by implementing `getClassName()` to map each enum value to an annotated class.

```
// The key enum
enum UserType: string
{
    case Profile = 'profile';
}
```

```
use Sylarele\ObjectMetadataMapper\MetadataService;

/**
 * @extends MetadataService
 */
class UserMetadataService extends MetadataService
{
    protected function getClassName(BackedEnum $keyTemplate): string
    {
        return match ($keyTemplate) {
            UserType::Profile => UserObject::class,
        };
    }
}
```

Using the service
-----------------

[](#using-the-service)

```
$service = new UserMetadataService();
$dto = $service->findByKey(UserType::Profile);

// Structured fake data
$dto->fake;

// Field descriptions
$dto->description;
```

### `MetadataDto` structure

[](#metadatadto-structure)

PropertyTypeDescription`$template``BackedEnum`The key used`$description``array`Mapping `key => description``$fake``array`Mapping `key => fake value`Available attributes
--------------------

[](#available-attributes)

AttributeDescription`StringMapper`Short string (max 60 characters)`TextMapper`Long text`IntegerMapper`Integer`BooleanMapper`Boolean`DateMapper`Date (`Y-m-d`)`DateTimeMapper`Date and time`TimeMapper`Time`EmailMapper`Email address`PhoneMapper`Phone number`UrlMapper`URL`ImageMapper`Image URL`FirstNameMapper`First name`LastNameMapper`Last name`FullNameMapper`Full name`AddressMapper`Postal address`AmountMapper`Numeric amount`EnumValueMapper`Enum value`ReferenceMapper`Reference (UUID / ID)`ArrayMapper`Array of values`StrictArrayMapper`Strictly typed array`ArrayEachMapper`Array with N occurrences of a mapper`StrictArrayEachMapper`Strict array with N occurrences`ObjectMapper`Object composed of sub-mappers`ObjectEachMapper`Array of N composed objects

###  Health Score

48

—

FairBetter than 93% of packages

Maintenance96

Actively maintained with recent releases

Popularity21

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 80% of commits — single point of failure

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

Recently: every ~111 days

Total

8

Last Release

25d ago

PHP version history (2 changes)v0.0.1PHP ^8.3

v0.3.0PHP ^8.3|^8.4|^8.5

### Community

Maintainers

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

---

Top Contributors

[![noelmaHelloCSE](https://avatars.githubusercontent.com/u/131659730?v=4)](https://github.com/noelmaHelloCSE "noelmaHelloCSE (12 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")[![godartm](https://avatars.githubusercontent.com/u/11872790?v=4)](https://github.com/godartm "godartm (1 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Rector

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/sylarele-object-metadata-mapper/health.svg)

```
[![Health](https://phpackages.com/badges/sylarele-object-metadata-mapper/health.svg)](https://phpackages.com/packages/sylarele-object-metadata-mapper)
```

###  Alternatives

[dklemmt/contao_dk_mmenu

Implementation of mmenu as an extension for the Contao Open Source CMS.

1780.9k](/packages/dklemmt-contao-dk-mmenu)[kitpages/semaphore-bundle

This is a Symfony2 bundle that provides a semaphore system.

107.4k1](/packages/kitpages-semaphore-bundle)

PHPackages © 2026

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