riverwaysoft / api-tools
API 工具
0.2.9.6
2023-08-22 10:12 UTC
Requires
- php: ^8.0|^8.1
- ext-intl: *
- giggsey/libphonenumber-for-php: ^8.11
- moneyphp/money: ^3
- myclabs/php-enum: ^1.7
- phpdocumentor/reflection-docblock: ^5.2
- symfony/intl: ^5.3|^6.0|^6.2
- symfony/polyfill-uuid: ^1.23
- symfony/serializer: ^5.3|6.0.1|^6.2
Requires (Dev)
- api-platform/core: ^2.6
- doctrine/orm: ^2.9
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- spatie/phpunit-snapshot-assertions: ^4.2
- symfony/messenger: ^5.3|^6.0|^6.2
- symfony/validator: ^5.3|^6.0|^6.2
Suggests
- api-platform/core: ^2.6
- doctrine/orm: ^2.9
- symfony/messenger: ^5.3|^6.0|^6.2
This package is auto-updated.
Last update: 2024-09-22 12:47:54 UTC
README
安装
composer req riverwaysoft/api-tools
包含内容
TelephoneObject
libphonenumber 和 PhoneNumberType 的包装,用于 DoctrineType。配置
doctrine: dbal: types: phone_number: Riverwaysoft\ApiTools\Telephone\Doctrine\DBAL\Types\TelephoneObjectType
ApiPlatform 扩展
额外的序列化器(枚举、TelephoneObject、Money)
配置
$services
->load('Riverwaysoft\\ApiTools\\ApiPlatform\\Serializer\\', __DIR__ . '/../vendor/riverwaysoft/api-tools/src/Lib/ApiPlatform/Serializer');
额外的过滤器(查看 riveradmin ;))
- RiverAdminEnumSearchFilter
- RiverAdminSearchFilter
- RiverAdminBooleanFilter
- AbstractFullTextSearchFilter
领域事件
使用方法
class UserRegisteredMessage { public function __construct(public string $username) {} } use Riverwaysoft\ApiTools\DomainEvents\EventSourceCollector; class User extends EventSourceCollector { public function signUp(string $username){ $this->rememberMessage(new UserRegisteredMessage($username)); } } # After that message can be consumed with: $user = new User(); $messages = $user->popMessages();
或者可以使用 doctrine 适配器自动完成
配置
$services->set(Riverwaysoft\ApiTools\DomainEvents\Doctrine\DoctrineDomainEventsCollector::class)->public() ->tag('doctrine.event_listener', ['event' => "postPersist"]) ->tag('doctrine.event_listener', ['event' => "postUpdate"]) ->tag('doctrine.event_listener', ['event' => "postFlush"]) ->tag('doctrine.event_listener', ['event' => "postLoad"]);
InputValueResolver
一组自动将 HTTP POST 主体和 GET 查询序列化为类型对象的序列化器。
#[Query] 属性的使用
class UserFilter { public function __construct( public int $ageGreaterThan, public string $name, ) { } } class CreateUserInput { public function __construct( public int $age, public string $name, ) { } } use Riverwaysoft\ApiTools\InputValueResolver\Query; use Riverwaysoft\ApiTools\InputValueResolver\Input; class UserController { #[Route('/api/users', methods: ['GET'])] public function getUsers(#[Query] UserFilter $userFilter) { // Use $userFilter for requests like // /api/users?ageGreaterThan=18&name=test } #[Route('/api/users', methods: ['POST'])] public function createUser(#[Input] CreateUserInput $input) { // variable $input will be automatically created // from the request body } }
services.yml 中的配置
Riverwaysoft\ApiTools\InputValueResolver\:
resource: '../vendor/riverwaysoft/api-tools/src/InputValueResolver'
UnicodeIgnoreOrderJsonDriver
为 phpunit-snapshot-assertions 库提供的驱动程序。此驱动程序负责以下三个主要任务
- 显示未转义的 Unicode 字符,因此您将看到 "£" 而不是 "\u00a3"
- 忽略属性顺序。例如,相等的 JSON
{a: 1, b: 2}
和{b: 2, a: 1}
- 忽略 JSON 中数组元素的顺序。例如,相等的 JSON 数组
[{a: 1}, {b: 2}]
和[{b: 2}, {a: 1}]
如何使用
将以下 trait 添加到所有测试中
use Riverwaysoft\ApiTools\Testing\UnicodeIgnoreOrderJsonDriver; // public function assertMatchesJsonUnicodeSnapshot(mixed $actual): void { $this->assertMatchesSnapshot($actual, new UnicodeIgnoreOrderJsonDriver()); }
使用 assertMatchesJsonUnicodeSnapshot
代替 assertMatchesJsonSnapshot
。