Mapper映射
属性映射
use Astral\Serialize\Attributes\InputName;
use Astral\Serialize\Attributes\OutputName;
use Astral\Serialize\Support\Mappers\{
CamelCaseMapper,
SnakeCaseMapper,
PascalCaseMapper,
KebabCaseMapper
};
use Astral\Serialize\Serialize;
#[Groups('profile','api')]
class User extends Serialize {
// 直接指定映射名称
#[InputName('user_name', groups: ['profile','api'])]
#[OutputName('userName', groups: ['profile','api'])]
public string $name;
// 使用映射器进行风格转换
#[InputName(CamelCaseMapper::class, groups: ['profile','api'])]
#[OutputName(SnakeCaseMapper::class, groups: ['profile','api'])]
public int $userId;
// 支持多个映射和分组
#[InputName('profile-email', groups: 'profile')]
#[OutputName('userEmail', groups: 'profile')]
public string $email;
}
// 使用不同的映射策略
$user = User::setGroups('profile')::from([
'user_name' => '张三', // 映射到 $name
'userId' => 123, // 使用 CamelCaseMapper 转换
'profile-email' => 'user@example.com' // 仅在 'profile' 分组生效
]);
// 输出时应用不同的映射
$userArray = $user->toArray();
// $userArray 的内容:
// [
// 'userName' => '张三',
// 'user_id' => '123',
// 'userEmail' => user@example.com,
// ]全局类映射
全局类映射的分组使用
需要搭配Groups注解一起使用
自定义映射器
Tips:属性映射优先于类级映射
最后更新于