Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alekitto/metadata
Metadata management library in PHP
https://github.com/alekitto/metadata
annotations metadata php
Last synced: 3 days 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 (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2024-08-30T12:28:08.000Z (3 months ago)
- Last Synced: 2024-10-13T16:12:24.437Z (about 1 month ago)
- Topics: annotations, metadata, php
- Language: PHP
- Homepage:
- Size: 162 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
![Tests](https://github.com/alekitto/metadata/workflows/Tests/badge.svg)
[![codecov](https://codecov.io/gh/alekitto/metadata/branch/master/graph/badge.svg)](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.