gam6itko / jms-serializer-config-converter
将 jms-serialize 元数据配置转换为另一种格式
v0.1.1
2020-05-30 18:54 UTC
Requires
- jawira/case-converter: ^3.4
- jms/serializer: ^2.0||^3.0
Requires (Dev)
- doctrine/collections: ^1.6
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^7.5||^8.0||^9.0
- symfony/yaml: ^3.0||^4.0||^5.0
Suggests
- symfony/yaml: Required if you'd like to use the YAML metadata format.
This package is auto-updated.
Last update: 2024-09-09 03:09:31 UTC
README
将 jms-serializer 元数据配置转换为另一种格式。
我的项目由于注解中的序列化配置变得很大,需要将其拆分成多个小项目。此外,我还需要将序列化配置转换为不同项目的文件。
如果您有相同的问题,则此库将帮助您。
安装
composer require gam6itko/jms-serializer-config-converter --dev
支持
使用
use Gam6itko\JSCC\Converter\Converter; use Gam6itko\JSCC\Denormalizer\XmlDenormalizer; use Gam6itko\JSCC\Denormalizer\YamlDenormalizer; use Gam6itko\JSCC\Normalizer\AnnotationNormalizer; use Gam6itko\JSCC\Normalizer\XmlNormalizer; use Gam6itko\JSCC\Normalizer\YamlNormalizer; use Metadata\Driver\FileLocator; // normalizers $xmlFileLocator = new FileLocator([ 'Namespace' => 'folder_with_xml' ]); $xmlNormalizer = new XmlNormalizer($xmlFileLocator); $yamlFileLocator = new FileLocator([ 'Namespace' => 'folder_with_yaml' ]); $yamlNormalizer = new YamlNormalizer($yamlFileLocator); $annotationNormalizer = new AnnotationNormalizer(); // denormalizers $xmlDenormalizer = new XmlDenormalizer([ 'Namespace' => 'folder_where_to_save_xml' ]); $yamlDenormalizer = new YamlDenormalizer([ 'Namespace' => 'folder_where_to_save_yaml' ]); // show time $converter = new Converter( [ 'annotation' => $annotationNormalizer, 'annot' => $annotationNormalizer, 'xml' => $xmlNormalizer, 'yaml' => $yamlNormalizer, 'yml' => $yamlNormalizer, 'foo' => $yamlNormalizer, ], [ 'xml' => $xmlDenormalizer, 'yaml' => $yamlDenormalizer, 'bar' => $yamlDenormalizer, ] ); $refClass = new \ReflectionClass('Namespace\ClassName'); // get annotation from `Namespace\ClassName` class and save it to `folder_where_to_save_xml` $converter->convert($refClass, 'annotation', 'yaml'); // get yaml from `folder_with_xml` and save it to `folder_where_to_save_yaml` $converter->convert($refClass, 'xml', 'yaml'); // get yaml from `folder_with_yaml` and save it to `folder_where_to_save_xml` $converter->convert($refClass, 'yml', 'xml'); // get yaml from `folder_with_yaml` and save it to `folder_where_to_save_yaml` $converter->convert($refClass, 'foo', 'bar'); // exception here !!! $converter->convert($refClass, 'xml', 'annotation');
在 Symfony 中的使用
services: Gam6itko\JSCC\Normalizer\AnnotationNormalizer: ~ Gam6itko\JSCC\Normalizer\XmlNormalizer: arguments: ['@jms_serializer.metadata.file_locator'] Gam6itko\JSCC\Normalizer\YamlNormalizer: arguments: ['@jms_serializer.metadata.file_locator'] Gam6itko\JSCC\Denormalizer\XmlDenormalizer: arguments: - 'Namespace': '%kernel.project_dir%/config/serializer/xml/Namespace' Gam6itko\JSCC\Denormalizer\YamlDenormalizer: arguments: - 'Namespace': '%kernel.project_dir%/config/serializer/yaml/Namespace' Gam6itko\JSCC\Converter\Converter: arguments: - annotation: '@Gam6itko\JSCC\Normalizer\AnnotationNormalizer' annot: '@Gam6itko\JSCC\Normalizer\AnnotationNormalizer' xml: '@Gam6itko\JSCC\Normalizer\XmlNormalizer' yaml: '@Gam6itko\JSCC\Normalizer\YamlNormalizer' yml: '@Gam6itko\JSCC\Normalizer\YamlNormalizer' foo: '@Gam6itko\JSCC\Normalizer\YamlNormalizer' - xml: '@Gam6itko\JSCC\Denormalizer\XmlDenormalizer' yaml: '@Gam6itko\JSCC\Denormalizer\YamlDenormalizer' bar: '@Gam6itko\JSCC\Denormalizer\YamlDenormalizer' Gam6itko\JSCC\Command\ConvertCommand: arguments: ['@Gam6itko\JSCC\Converter\Converter'] tags: - {name: console.command}
php bin/console jms-serializer:config-convert Namespace annotation yaml -vvv