php-etl/metadata

描述数据结构,以自动配置和处理数据转换与数据操作。

v0.4.0 2023-04-12 13:29 UTC

This package is auto-updated.

Last update: 2024-09-12 16:28:16 UTC


README

Quality PHPUnit Mutations PHPStan level 5 PHPStan level 6 PHPStan level 7 PHPStan level 8 PHP

这是关于什么的?

此组件旨在描述数据结构,以帮助其他包自动配置和处理数据转换与数据操作。

安装

要在您的应用程序中使用此包,请通过composer引入它

composer require php-etl/metadata

运行测试

此包中声明了PHPSpec测试,以确保一切运行正常。

phpspec run

使用此包读取现有代码的元数据

为了读取现有PHP代码的元数据,您可以使用自动类型猜测器。可以通过以下代码初始化它

<?php

use Kiboko\Component\Metadata\TypeGuesser;
use Phpactor\Docblock\DocblockFactory;
use PhpParser\ParserFactory;

$typeGuesser = new TypeGuesser\CompositeTypeGuesser(
    new TypeGuesser\Native\NativeTypeGuesser(),
    new TypeGuesser\Docblock\DocblockTypeGuesser(
        (new ParserFactory())->create(ParserFactory::ONLY_PHP7),
        new DocblockFactory()
    )
);

然后,使用实例作为函子以自动发现类型元数据。

DTO类元数据获取器示例

<?php

use Kiboko\Component\Metadata;
use Kiboko\Component\Metadata\TypeGuesser\TypeGuesserInterface;

/** @var TypeGuesserInterface $guesser */

class Person
{
    public string $firstName;
    public string $lastName;
    public ?string $job;
}

$classOrObject = new \ReflectionClass(\Person::class);

/** @var Metadata\ClassTypeMetadata $metadata */
$metadata = (new Metadata\ClassTypeMetadata($classOrObject->getShortName(), $classOrObject->getNamespaceName()))
    ->addProperties(...array_map(
            function(\ReflectionProperty $property) use($classOrObject, $guesser) {
                return new Metadata\PropertyMetadata(
                    $property->getName(),
                    ...$guesser($classOrObject, $property)
                );
            },
            $classOrObject->getProperties(\ReflectionProperty::IS_PUBLIC)
        )
    );

自动类元数据猜测

为了简化类元数据的构建,有一个元数据猜测器可以帮助简化元数据的构建。

<?php
use Kiboko\Component\Metadata;

/** @var Metadata\ClassMetadataBuilder $metadataBuilder */
$metadataBuilder = new Metadata\ClassMetadataBuilder(
    new Metadata\PropertyGuesser\ReflectionPropertyGuesser($typeGuesser),
    new Metadata\MethodGuesser\ReflectionMethodGuesser($typeGuesser),
    new Metadata\FieldGuesser\FieldGuesserChain(
        new Metadata\FieldGuesser\PublicPropertyFieldGuesser(),
        new Metadata\FieldGuesser\VirtualFieldGuesser()
    ),
    new Metadata\RelationGuesser\RelationGuesserChain(
        new Metadata\RelationGuesser\PublicPropertyUnaryRelationGuesser(),
        new Metadata\RelationGuesser\PublicPropertyMultipleRelationGuesser(),
        new Metadata\RelationGuesser\VirtualRelationGuesser()
    )
);

$metadata = $metadataBuilder->buildFromFQCN('FooBarBundle\\Entity\\Foo');

PHP版本和类型属性

此包从php 7.2+开始工作。

如果您在7.4之前的版本上运行它,属性类型提示未激活,可以使用虚拟元数据读取器替换标准读取器。

此外,如果您不希望将PHPDocs考虑在内,您可以使用另一个虚拟元数据读取器用于此特定部分。

文档

要进一步了解DTO结构,请查看对象引用