kcs / metadata
类/属性元数据管理组件
v4.1.2
2024-08-30 12:27 UTC
Requires
- php: ^8.0
- thecodingmachine/safe: ^1.0 | ^2.0
Requires (Dev)
- doctrine/annotations: ^1.2 | ^2.0
- doctrine/cache: ^1.4
- kcs/class-finder: ^0.2 | ^0.3 | ^1.0@dev
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.0
- psr/event-dispatcher: ^1.0
- roave/security-advisories: dev-master
- solido/php-coding-standards: dev-master
- symfony/cache: ^4.4|^5.0|^6.0
- symfony/finder: ^4.4|^5.0|^6.0
Suggests
- symfony/cache: cache metadata
- symfony/event-dispatcher: dispatch metadata load event
- symfony/finder: support for metadata file locators
README
概述
这个库为PHP类的类、方法和属性提供了元数据加载、管理和检索的实用工具。
安装
使用composer安装
$ composer require kcs/metadata
使用
负责检索给定类元数据的元数据工厂。
要创建一个元数据工厂,您可以在自己的类中实现MetadataFactoryInterface
或扩展AbstractMetadataFactory
。
use Kcs\Metadata\ClassMetadataInterface; use Kcs\Metadata\Factory\MetadataFactoryInterface; class Factory implements MetadataFactoryInterface { public function getMetadataFor($class): ClassMetadataInterface { ... } }
use Kcs\Metadata\ClassMetadataInterface; use Kcs\Metadata\Factory\AbstractMetadataFactory; class Factory extends AbstractMetadataFactory { protected function createMetadata(\ReflectionClass $class): ClassMetadataInterface { return new MyClassMetadata($class); } }
这允许您通过简单地扩展createMetadata
方法来指定将用于元数据的ClassMetadataInterface
实现。
如果您扩展了AbstractMetadataFactory
类(或使用创建类元数据实例的MetadataFactory
类),您必须创建一个实现LoaderInterface
的元数据加载器类。
use Kcs\Metadata\Loader\LoaderInterface; class Loader implements LoaderInterface { public function loadClassMetadata(ClassMetadataInterface $classMetadata) { ... } }
如果您的元数据有多个来源(注解、YAML、XML等),您可以使用ChainLoader
类,将您的加载器添加到其中。
验证
当元数据加载时,工厂的validate
方法被调用,并带有新加载的元数据作为参数,并且如果存在事件调度器,将分发Kcs\Metadata\Event\ClassMetadataLoadedEvent
事件。
您可以通过扩展validate
或监听元数据加载事件来检查元数据的有效性。如果发生验证错误,您必须抛出InvalidMetadataException
。
元数据类
您可以通过扩展提供的类ClassMetadata
、MethodMetadata
和PropertyMetadata
来构建您的元数据信息。
默认情况下,所有公共属性都会在缓存中序列化(如果存在缓存)。您可以通过扩展元数据类的__sleep
方法来自定义此行为,返回要序列化的属性数组。
许可
此库在MIT许可下发布
贡献
欢迎贡献。请随意提出问题或提交PR来改进此库。