https://github.com/alekitto/metadata
Metadata management library in PHP
https://github.com/alekitto/metadata
annotations metadata php
Last synced: 2 months ago
JSON representation
Metadata management library in PHP
- Host: GitHub
- URL: https://github.com/alekitto/metadata
- Owner: alekitto
- License: mit
- Created: 2016-02-08T07:43:29.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2025-02-24T19:27:50.000Z (5 months ago)
- Last Synced: 2025-04-06T16:29:49.336Z (3 months ago)
- Topics: annotations, metadata, php
- Language: PHP
- Homepage:
- Size: 170 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Metadata management library in PHP

[](https://codecov.io/gh/alekitto/metadata)## Overview
This library provides utilities for metadata loading, management and retrieval for PHP classes, methods and properties.
## Installation
Install with composer
```bash
$ composer require kcs/metadata
```## Usage
A metadata factory responsible for retrieving metadatas for a given class.
To create a metadata factory you can implement `MetadataFactoryInterface`
on your own class or extend the `AbstractMetadataFactory`.```php
use Kcs\Metadata\ClassMetadataInterface;
use Kcs\Metadata\Factory\MetadataFactoryInterface;class Factory implements MetadataFactoryInterface
{
public function getMetadataFor($class): ClassMetadataInterface
{
...
}
}
``````php
use Kcs\Metadata\ClassMetadataInterface;
use Kcs\Metadata\Factory\AbstractMetadataFactory;class Factory extends AbstractMetadataFactory
{
protected function createMetadata(\ReflectionClass $class): ClassMetadataInterface
{
return new MyClassMetadata($class);
}
}
```This allows you to specify which implementation of `ClassMetadataInterface`
will be used for your metadata simply extending the `createMetadata` method.If you extend the `AbstractMetadataFactory` class (or use `MetadataFactory` class
which creates a `ClassMetadata` instance for class metadatas), you have to create
your metadata loader class implementing `LoaderInterface`.```php
use Kcs\Metadata\Loader\LoaderInterface;class Loader implements LoaderInterface
{
public function loadClassMetadata(ClassMetadataInterface $classMetadata)
{
...
}
}
```If more than one source is available for your metadata (Annotations, YAMLs, XMLs,
etc.) you can use the `ChainLoader` class, adding your loaders to it.## Validation
When a metadata is loaded the factory `validate` method is called with the newly loaded
metadata as argument and the `Kcs\Metadata\Event\ClassMetadataLoadedEvent` event is dispatched
(if an event dispatcher is present).
You can extend `validate` or listen for the metadata loaded event and check
for metadata validity. If a validation error occurs you have to throw an
`InvalidMetadataException`.## Metadata classes
You can extend the provided classes `ClassMetadata`, `MethodMetadata` and `PropertyMetadata`
to build your metadata information.
By default, all the public properties are serialized in cache (if cache is
present). You can customize this behaviour by extending the `__sleep` method
of the metadata classes, returning an array of serialized properties.## License
This library is released under the MIT license
## Contributions
Contributions are always welcome.
Feel free to open an issue or submit a PR to improve this library.