elipettingale / transformation
一个易于通过创建转换器类来转换数据的包。
Requires
This package is auto-updated.
Last update: 2024-09-09 21:17:28 UTC
README
一个使用转换器类轻松转换数据的包。此包的核心理念是能够将数据从一个格式转换为不同的或简化的格式。例如,当你在创建API端点且不想返回所有内容,或者想要以多种格式返回内容时,可以使用此功能。
这是该包的通用版本。还有一个WordPress特定版本:[https://github.com/elipettingale/wordpress-transformation](https://github.com/elipettingale/wordpress-transformation)
如何安装
只需使用composer安装此包
composer require elipettingale/transformation
如何使用
首先创建一个转换器类
class UserTransfomer extends Transformer
{
}
然后使用Transform类转换一些数据
$users = [
[
'first_name' => 'Dave',
'last_name' => 'Test',
'email' => 'dave@test.com'
],
[
'first_name' => 'Gina',
'last_name' => 'Test',
'email' => 'gina@test.com'
]
];
$users = Transform::all($users, UserTransfomer::class);
根据在转换器类中定义的配置,将操纵数据并返回
构建转换器类
你可以使用一些工具来转换数据,这些工具可以在转换器类中定义。
包含或排除
这些是可以定义的属性,用于确定哪些属性会被返回。
定义包含意味着仅返回你定义的属性,例如以下转换器
class UserTransfomer extends Transformer
{
protected $includes = [
'first_name'
];
}
意味着使用我们之前的示例,现在在$users中我们有以下内容
[
[
'first_name' => 'Dave'
],
[
'first_name' => 'Gina'
]
]
定义排除意味着除了你定义的属性外,所有属性都会返回,例如以下转换器
class UserTransfomer extends Transformer
{
protected $excludes = [
'first_name'
];
}
现在将把$users转换为以下内容
[
[
'last_name' => 'Test',
'email' => 'dave@test.com'
],
[
'last_name' => 'Test',
'email' => 'gina@test.com'
]
]
如果你两者都没有定义,则返回所有属性。
重命名
不喜欢属性名?你可以使用重命名来更改属性的键
class UserTransfomer extends Transformer
{
protected $includes = [
'first_name'
];
protected $rename = [
'first_name' => 'name'
];
}
将返回以下内容
[
[
'name' => 'Dave'
],
[
'name' => 'Gina'
]
]
修饰器
如果你曾经使用过Eloquent,你应该能认出这个。修饰器是你定义的一个方法,它会在返回数据之前以某种方式修改属性。它还可以用来定义新的计算属性。
例如,以下转换器
class UserTransfomer extends Transformer
{
public function getFullNameAttribute()
{
return $this->item['first_name'] . ' ' . $this->item['last_name'];
}
}
这将创建一个名为full_name的新属性,并使用你的函数来计算其值。
现在,当我们通过这个转换器运行用户时,我们得到
[
'first_name' => 'Dave',
'last_name' => 'Test',
'email' => 'dave@test.com',
'full_name' => 'Dave Test
],
[
'first_name' => 'Gina',
'last_name' => 'Test',
'email' => 'gina@test.com',
'full_name' => 'Gina Test
]
请注意,这些新属性仍将遵循定义的包含、排除和重命名。