TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
--TEST--
|
|
Symfony Serializer pattern: group contexts merged with unpack
|
|
--FILE--
|
|
<?php
|
|
class SymfonyAttributeContextMetadata
|
|
{
|
|
private array $normalizationContexts = [];
|
|
|
|
public function setNormalizationContextForGroups(array $context, array $groups = []): void
|
|
{
|
|
if (!$groups) {
|
|
$this->normalizationContexts['*'] = $context;
|
|
}
|
|
|
|
foreach ($groups as $group) {
|
|
$this->normalizationContexts[$group] = $context;
|
|
}
|
|
}
|
|
|
|
public function getNormalizationContextForGroups(array $groups): array
|
|
{
|
|
$contexts = [];
|
|
foreach ($groups as $group) {
|
|
$contexts[] = $this->normalizationContexts[$group] ?? [];
|
|
}
|
|
|
|
return array_merge($this->normalizationContexts['*'] ?? [], ...$contexts);
|
|
}
|
|
}
|
|
|
|
function main(): void
|
|
{
|
|
$metadata = new SymfonyAttributeContextMetadata();
|
|
$metadata->setNormalizationContextForGroups(['skip_null_values' => true, 'groups' => ['default']]);
|
|
$metadata->setNormalizationContextForGroups(['groups' => ['admin'], 'max_depth' => 2], ['admin']);
|
|
$metadata->setNormalizationContextForGroups(['ignored_attributes' => ['secret']], ['public']);
|
|
|
|
var_dump($metadata->getNormalizationContextForGroups(['missing', 'admin', 'public']));
|
|
}
|
|
?>
|
|
--EXPECT--
|
|
array(4) {
|
|
["skip_null_values"]=>
|
|
bool(true)
|
|
["groups"]=>
|
|
array(1) {
|
|
[0]=>
|
|
string(5) "admin"
|
|
}
|
|
["max_depth"]=>
|
|
int(2)
|
|
["ignored_attributes"]=>
|
|
array(1) {
|
|
[0]=>
|
|
string(6) "secret"
|
|
}
|
|
}
|
|
|