bigoen / api-bridge-converter
API桥接转换器,用于API项目。
v1.0.3
2024-02-29 00:07 UTC
Requires
- php: >=8.1
- symfony/property-access: ^5.0|^6.0
- symfony/property-info: ^5.0|^6.0
- symfony/serializer: ^5.0|^6.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-29 14:03:42 UTC
README
安装
composer require bigoen/api-bridge-converter
创建转换器。
<?php declare(strict_types=1); namespace Bigoen\ApiBridgeConverter\Model; /** * @author Şafak Saylam <safak@bigoen.com> */ class ConvertUnsetsProperty implements ConvertPropertyInterface { public array $properties = []; public static function new(array $properties = []): self { $object = new self(); $object->properties = $properties; return $object; } public function convert(array $arr): array { foreach ($this->properties as $property) { unset($arr[$property]); } return $arr; } }
在树中转换API值。
use Bigoen\ApiBridge\Bridge\ApiPlatform\HttpClient\JsonldClient; use Bigoen\ApiBridgeConverter\Model\ConvertDateTimeProperty; use Bigoen\ApiBridgeConverter\Model\ConvertTreeProperty; use Bigoen\ApiBridgeConverter\Model\ConvertUnsetsProperty; use Bigoen\ApiBridgeConverter\Model\ConvertProperty; $categories = $this->entityManager ->getRepository(Category::class) ->findAllIndexById(); $tags = $this->entityManager ->getRepository(Tag::class) ->findAllIndexById(); // set converts. $convertProperties = [ new ConvertTreeProperty( '[category]', false, '[category][@id]', null, $this->getConvertValues('/api/categories/{id}', $categories) ), new ConvertTreeProperty( '[tags]', true, '[tags][][@id]', Tag::class, $this->getConvertValues('/api/tags/{id}', $tags), [ new ConvertDateTimeProperty('[createdAt]'), new ConvertDateTimeProperty('[updatedAt]'), ] ), new ConvertDateTimeProperty('[createdAt]'), new ConvertDateTimeProperty('[updatedAt]'), // class property and api property. new ConvertProperty('[id]', '[_id]'), ]; // unsets for sending. $sendingConvertProperties = [ new ConvertUnsetsProperty(['id', 'name']), ]; /* @var $client JsonldClient */ $client->setConvertProperties($convertProperties)->setSendingConvertProperties($sendingConvertProperties);
用于自定义对象。
<?php declare(strict_types=1); namespace Bigoen\Test\Model\Input; use Bigoen\ApiBridgeConverter\Model\ConvertUnsetNullsProperty; use Bigoen\ApiBridgeConverter\Model\Traits\ArrayObjectConverterTrait; use Bigoen\Test\Contracts\InputInterface; /** * @author Şafak Saylam <safak@bigoen.com> */ final class PaymentCardInput implements InputInterface { use ArrayObjectConverterTrait; public function __construct( public string $cardHolderName, public string $cardNumber, public string $expireYear, public string $expireMonth, public string $cvc, public ?string $cardAlias = null, public ?bool $storeCardAfterSuccessPayment = null, public ?string $cardUserKey = null ) { } public function toArray(): array { return self::objectToArray($this, [ new ConvertUnsetNullsProperty(), ]); } }
重要:属性和深度名称的详细信息 > https://symfony.com.cn/doc/current/components/property_access.html