maximaster / jaft
league/fractal universal JSON:API transformer.
v1.0.0
2024-09-03 14:56 UTC
Requires
- league/fractal: ^0.19.2
- webmozart/assert: ^1.9.0
Requires (Dev)
- jawira/case-converter: ^3.4.0
- kahlan/kahlan: ^5.1
- phpdocumentor/reflection-docblock: 5.x-dev
- symfony/property-access: ^5.2
- symfony/property-info: ^5.2
Suggests
- jawira/case-converter: For \Maximaster\Jaft\CaseConverter\JawiraCaseConverter
- maximaster/atoa: For \Maximaster\Jaft\ObjectFormatter\AtoaObjectFormatter
- symfony/property-access: For \Maximaster\Jaft\DataExtractor\PropertyAccessorDataExtractor
- symfony/property-info: For \Maximaster\Jaft\SchemaRepository\PropertyInfoSchemaRepository
This package is auto-updated.
Last update: 2024-11-03 15:25:25 UTC
README
Universal JSON:API league/fractal transformer for your objects.
composer require maximaster/jaft
Why?
According to league/fractal manual page about Transformers you should create a transformer per object type. That's a lot of routine work.
Or just configure universal Maximaster\Jaft\Jaft
transformer and you are ready
to go.
Example
services.yaml
services: Maximaster\Jaft\Contract\Mapper: alias: 'api_mapper' api_mapper: class: Maximaster\Jaft\Mapper\DefaultMapper arguments: - '@api_output_manager' - '@api_transformer' - '@api_naming_provider' api_output_manager: class: League\Fractal\Manager arguments: - '@api_scope_factory' calls: - setSerializer: [ '@api_serializer' ] api_serializer: class: Maximaster\Jaft\Serializer\JsonApiSerializer arguments: - '' - null api_scope_factory: class: League\Fractal\ScopeFactory api_transformer: class: Maximaster\Jaft\Jaft arguments: - '@api_schema_repository' - '@api_data_extractor' - '@api_naming_provider' - '@api_formatter' - null api_schema_repository: class: Maximaster\Jaft\SchemaRepository\PropertyInfoSchemaRepository arguments: - '@api_property_info_extractor' - '@api_naming_provider' - '@api_identity_locator' - '@api_type_converter' - - 'Project\Process\UserManagement\Domain\ValueObject\UserTimestamp' - 'Project\Process\DatabaseManagement\Domain\Entry\Field\NativeValueMap' - - 'Bitrix\Main\Type\DateTime' api_property_info_extractor: class: Symfony\Component\PropertyInfo\PropertyInfoExtractor arguments: - [ '@api_static_property_lister', '@api_packed_embeddable_property_lister', '@api_default_property_lister' ] - [ '@api_packed_embeddable_type_extractor', '@Maximaster\Jaft\PropertyTypeExtractor\ReplacedPropertyTypeExtractor', '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ] - [ '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ] - [ '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ] - [ '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ] api_static_property_lister: class: Maximaster\Jaft\PropertyListExtractor\StaticPropertyListExtractor arguments: - Project\Process\System\Domain\ValueObject\EntityRef: ['id'] Project\Process\System\Domain\ValueObject\LabeledEntityRef: ['id', 'label'] Project\Process\System\Domain\Contract\Ref: ['id'] Maximaster\Jaft\PropertyTypeExtractor\ReplacedPropertyTypeExtractor: arguments: $realExtractor: '@api_property_phpdoc_extractor' $map: '%orm_entity_map%' api_packed_embeddable_property_lister: class: Maximaster\Jaft\PropertyListExtractor\PackedEmbeddablePropertyListExtractor api_default_property_lister: class: Maximaster\Jaft\PropertyListExtractor\AccessorPropertyListExtractor api_packed_embeddable_type_extractor: class: Maximaster\Jaft\PropertyTypeExtractor\PackedEmbeddablePropertyTypeExtractor api_property_phpdoc_extractor: class: Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor arguments: - null - null - [ '' ] api_property_reflection_extractor: class: Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor arguments: - [ ] - [ '' ] api_naming_provider: class: Project\Process\System\IO\OpenApi\OpenApiNamingProvider arguments: - '@api_fcqn_naming_provider' - !tagged_iterator project.open_api.overlay_naming_provider api_fcqn_naming_provider: class: Maximaster\Jaft\NamingProvider\FqcnNamingProvider arguments: - '%%3$s-%%s' - '@api_type_case_converter' api_identity_locator: class: Project\Process\System\IO\OpenApi\IdentityLocator\EntityIdentityLocator api_type_converter: class: Maximaster\Jaft\TypeConverter\PropertyInfoTypeConverter api_type_case_converter: class: Maximaster\Jaft\CaseConverter\JawiraCaseConverter arguments: - 'pascal' - 'kebab' api_data_extractor: class: Maximaster\Jaft\DataExtractor\PropertyAccessorDataExtractor arguments: - '@api_schema_repository' - '@api_property_accessor' api_property_accessor: class: Project\Process\System\IO\OpenApi\PropertyAccessor\CacheablePropertyAccessor arguments: $realAccessor: '@api_property_accessor_worker' api_property_accessor_worker: class: Project\Process\System\IO\OpenApi\PropertyAccessor\GetterPropertyAccessor arguments: $fallback: '@api_property_accessor_fallback' api_property_accessor_fallback: class: Symfony\Component\PropertyAccess\PropertyAccessor arguments: - !php/const Symfony\Component\PropertyAccess\PropertyAccessor::MAGIC_GET - false - null - true - '@api_property_reflection_extractor' api_formatter: class: Maximaster\Jaft\ObjectFormatter\AtoaObjectFormatter arguments: - '@api_formatter_converter' api_formatter_converter: class: Maximaster\Atoa\Converter arguments: - !tagged_iterator project.open_api.formatter api_property_name_converter: class: Maximaster\Jaft\CaseConverter\JawiraCaseConverter arguments: - 'auto' - 'camel'