php-etl / metadata
描述数据结构,以自动配置和处理数据转换与数据操作。
v0.4.0
2023-04-12 13:29 UTC
Requires
- php: ^8.2
- doctrine/inflector: ^2.0
- nikic/php-parser: ^4.9@dev
- php-etl/metadata-contracts: 0.2.*
- phpactor/docblock: ^0.3.0@dev
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-12 16:28:16 UTC
README
这是关于什么的?
此组件旨在描述数据结构,以帮助其他包自动配置和处理数据转换与数据操作。
安装
要在您的应用程序中使用此包,请通过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结构,请查看对象引用。