kcs/metadata

类/属性元数据管理组件

v4.1.2 2024-08-30 12:27 UTC

README

Tests codecov

概述

这个库为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

元数据类

您可以通过扩展提供的类ClassMetadataMethodMetadataPropertyMetadata来构建您的元数据信息。
默认情况下,所有公共属性都会在缓存中序列化(如果存在缓存)。您可以通过扩展元数据类的__sleep方法来自定义此行为,返回要序列化的属性数组。

许可

此库在MIT许可下发布

贡献

欢迎贡献。请随意提出问题或提交PR来改进此库。