hexium-agency / symfony-serializer-for-laravel
Laravel 包用于 symfony/serializer 组件
v0.0.6
2024-05-15 06:26 UTC
Requires
- php: ^8.3
- illuminate/contracts: ^10 || ^11
- phpdocumentor/reflection-docblock: ^5.4
- spatie/laravel-package-tools: ^1.16
- symfony/cache: ^7.0
- symfony/property-access: ^7.0
- symfony/property-info: ^7.0
- symfony/serializer: ^7.0
- symfony/validator: ^7.0
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.15
- nunomaduro/collision: ^7.10 ||^8.1
- orchestra/testbench: ^8.22 || ^9.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-ray: ^1.36
README
symfony/serializer 组件是一个出色的对象序列化和反序列化工具。此包在 Laravel 和 symfony/serializer 组件之间提供了一个桥梁。然后它应该很容易与您的应用程序代码中的 DI 一起使用,以及添加一些规范化和编码器。
安装
您可以通过 composer 安装此包
composer require hexium-agency/symfony-serializer-for-laravel
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="symfony-serializer-for-laravel-config"
这是发布配置文件的内容
<?php /** * @return array{ * normalizers: array<array{id: string, priority?: int}>, * encoders: array<array{id: string, priority?: int}>, * list_extractors: array<array{id: string, priority?: int}>, * type_extractors: array<array{id: string, priority?: int}>, * access_extractors: array<array{id: string, priority?: int}>, * initializable_extractors: array<array{id: string, priority?: int}>, * defaultContext: array<string, mixed> * } */ return [ 'normalizers' => [ [ 'id' => 'serializer.normalizer.datetimezone', 'priority' => -915, ], [ 'id' => 'serializer.normalizer.dateinterval', 'priority' => -915, ], [ 'id' => 'serializer.normalizer.datetime', 'priority' => -910, ], [ 'id' => 'serializer.normalizer.json_serializable', 'priority' => -950, ], [ 'id' => 'serializer.denormalizer.unwrapping', 'priority' => 1000, ], [ 'id' => 'serializer.normalizer.uid', 'priority' => -890, ], [ 'id' => 'serializer.normalizer.object', 'priority' => -1000, ], [ 'id' => 'serializer.denormalizer.array', 'priority' => -990, ], [ 'id' => 'serializer.normalizer.backed_enum', 'priority' => -915, ], ], 'encoders' => [ [ 'id' => 'serializer.encoder.xml', ], [ 'id' => 'serializer.encoder.json', ], [ 'id' => 'serializer.encoder.yaml', ], [ 'id' => 'serializer.encoder.csv', ], ], 'list_extractors' => [ [ 'id' => 'property_info.reflection_extractor', 'priority' => -1000, ], [ 'id' => 'property_info.serializer_extractor', 'priority' => -999, ], ], 'type_extractors' => [ [ 'id' => 'property_info.php_doc_extractor', 'priority' => -990, ], [ 'id' => 'property_info.reflection_extractor', 'priority' => -1002, ], ], 'access_extractors' => [ [ 'id' => 'property_info.reflection_extractor', 'priority' => -1000, ], ], 'initializable_extractors' => [ [ 'id' => 'property_info.reflection_extractor', 'priority' => -1000, ], ], ];
用法
正常依赖注入
class SendDiscordNotification { private SerializerInterface $serializer; private HttpClientInterface $httpClient; private string $webhookUrl; public function __construct(SerializerInterface $serializer, HttpClientInterface $httpClient, string $webhookUrl) { $this->serializer = $serializer; $this->httpClient = $httpClient; $this->webhookUrl = $webhookUrl; } public function __invoke(DiscordNotification $notification) { $data = $this->serializer->serialize($notification, 'json'); $this->httpClient->request('POST', $this->webhookUrl, [ 'body' => $data, ]); } }
class DiscordNotificationParser { private SerializerInterface $serializer; public function __construct(SerializerInterface $serializer) { $this->serializer = $serializer; } public function parse(string $data): DiscordNotification { return $this->serializer->deserialize($data, DiscordNotification::class, 'json'); } }
使用外观
use HexiumAgency\SymfonySerializerForLaravel\Facades\Serializer; class DiscordNotificationParser { public function parse(string $data): DiscordNotification { return Serializer::deserialize($data, DiscordNotification::class, 'json'); } }
添加规范化和编码器
您可以通过将它们添加到配置文件来向序列化器添加规范化和编码器。优先级用于对规范化和编码器进行排序。服务 ID 必须与您的容器中的某些 ID 匹配。
测试
composer test
更新日志
有关最近更改的更多信息,请参阅 更新日志。
贡献
有关详细信息,请参阅 贡献。
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略。
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。