gowork / safe
类型安全工具
v0.2.2
2023-02-08 20:46 UTC
Requires
- php: ^7.4 || ^8.0
- dazet/type-utils: ^0.2
Requires (Dev)
- phpunit/phpunit: ^8.1
- symfony/console: ^5.0
- symfony/error-handler: ^5.0
- symfony/http-kernel: ^5.0
This package is auto-updated.
Last update: 2024-09-09 00:12:58 UTC
README
Safe accessors 对不安全或不确定的关联数据结构进行包装,并提供安全类型转换的方法。主要适用于 Symfony。
SafeAccessorTrait 方法
bool(string $key, bool $default = false): bool
- 如果可能,将值转换为
bool
(true, false, 0, 1) - 如果设置值但无法转换,则抛出
InvalidArgumentException
- 如果未设置值,则返回默认值
boolOrDefault(string $key, bool $default): bool
- 将值转换为
bool
(true, false, 0, 1) - 或返回默认值
string(string $key, string $default = ''): string
- 如果可能,将值转换为
string
- 如果设置值但无法转换,则抛出
InvalidArgumentException
- 如果未设置值,则返回默认值
stringNullable(string $key, ?string $default = null): ?string
- 如果可能,将值转换为
string
- 如果未设置值或值为
null
,则返回默认值 - 如果值不是
null
但无法转换,则抛出InvalidArgumentException
stringOrNull(string $key): ?string
- 如果可能,将值转换为
string
- 或返回
null
stringOrDefault(string $key, string $default): string
- 如果可能,将值转换为
string
- 或返回默认值
int(string $key, int $default = 0): int
- 如果可能,将值转换为
int
- 如果设置值但无法转换,则抛出
InvalidArgumentException
- 如果未设置值,则返回默认值
intNullable(string $key, ?int $default = null): ?int
- 如果可能,将值转换为
int
- 如果未设置值或值为
null
,则返回默认值 - 如果值不是
null
但无法转换,则抛出InvalidArgumentException
intOrNull(string $key): ?int
- 如果可能,将值转换为
int
- 或返回
null
intOrDefault(string $key, int $default): int
- 如果可能,将值转换为
int
- 或返回默认值
float(string $key, float $default = 0): float
- 如果可能,将值转换为
float
- 如果设置值但无法转换,则抛出
InvalidArgumentException
- 如果未设置值,则返回默认值
floatNullable(string $key, ?float $default = null): ?float
- 如果可能,将值转换为
float
- 如果未设置值或值为
null
,则返回默认值 - 如果值不是
null
但无法转换,则抛出InvalidArgumentException
floatOrNull(string $key): ?float
- 如果可能,将值转换为
float
- 或返回
null
floatOrDefault(string $key, float $default): float
- 如果可能,将值转换为
float
- 或返回默认值
strings(string $key): array<int, string>
- 如果可能,将值转换为字符串数组
- 如果某些项无法转换,则抛出
InvalidArgumentException
stringsFiltered(string $key): array<int, string>
- 将值转换为字符串数组,跳过无法转换的项
stringsForced(string $key, string $default = ''): array<int, string>
- 将值转换为字符串数组,无法转换的项用默认值替换
ints(string $key): array<int, int>
- 如果可能,将值转换为整数数组
- 如果某些项无法转换,则抛出
InvalidArgumentException
intsFiltered(string $key): array<int, int>
- 将值转换为整数数组,跳过无法转换的项
intsForced(string $key, int $default = ''): array<int, int>
- 将值转换为整数数组,无法转换的项用默认值替换
floats(string $key): array<int, float>
- 如果可能,将值转换为浮点数数组
- 如果某些项无法转换,则抛出
InvalidArgumentException
floatsFiltered(string $key): array<int, float>
- 将值转换为浮点数数组,跳过无法转换的项
floatsForced(string $key, float $default = ''): array<int, float>
- 将值转换为浮点数数组,无法转换的项用默认值替换
array(string $key): SafeAssocArray
- 将值转换为关联数组,并使用
SafeAssocArray
包装 - 如果值无法转换,则抛出
InvalidArgumentException
list(string $key): SafeAssocList
- 将值转换为关联数组列表,并使用
SafeAssocList
包装 - 如果值无法转换,则抛出
InvalidArgumentException
访问器
SafeAssocArray
$user = [ 'name' => 'John', 'age' => 18, 'sports' => ['football', 'handball'], ]; $safe = SafeAssocArray::from($user); $safe->string('name'); // 'John' $safe->int('age'); // 18 $safe->string('nickname', '--'); // '-' $safe->stringNullable('nickname'); // NULL $safe->string('nickname'); // InvalidArgumentException $safe->strings('sports'); // ['football', 'handball'] $safe->ints('sports'); // InvalidArgumentException
SafeConsoleInput
final class ExampleCommand extends Command { // ... protected function execute(InputInterface $input, OutputInterface $output): int { $arguments = SafeConsoleInput::arguments($input); // require string from argument $file = $arguments->string('name'); $options = SafeConsoleInput::options($input); // integer with default value $limit = $options->int('limit', 20); // optional integer value $pageOrNull = $options->intNullable('page'); // bool $isDryRun = $options->bool('dry-run', false); // string[] $tags = $options->strings('tag'); // int[] $tags = $options->ints('status'); } }
SafeRequest
final class ExampleAction extends Command { // ... public function __invoke(Request $request): Response { $safeRequest = SafeRequest::from($request); $query = $safeRequest->query(); $post = $safeReques->request(); $attributes = $safeReques->attributes(); $ip = $safeReques->ip(); $postId = $attributes->string('postId'); $tags = $post->strings('tags'); // ... } }