kamranahmedse / laraformer
Laravel 包,帮助您轻松地在应用程序中实现转换器逻辑
Requires
- php: >=5.4.0
- laravel/framework: ^5.1.11
This package is not auto-updated.
Last update: 2024-09-14 18:26:15 UTC
README
Laraformer 是一个 Laravel 5.* 包,可以让您轻松地引入数据转换层。
Laraformer(源于 Laravel Transformers)是一个 Laravel 5.* 包,可以让您轻松地在 Laravel 应用程序中引入转换器逻辑。
功能
- 自动转换模型。也支持手动转换
- 让您转换几乎任何类型的数据,例如数组、对象、集合、分页数据等
- 您不仅可以转换模型,还可以转换任何数据集
- 支持 Eloquent 和 Moloquent
- 易于使用;对于自动转换,您只需在模型中添加一个
transform
函数,对于手动转换,有一个单独的函数调用。更多内容稍后揭晓。 - 让您将转换器逻辑独立出来
- 让您确保任何架构变更都不会影响输出
两步安装
您只需安装此包并添加服务提供者
-
在终端运行
composer require kamranahmedse/laraformer
-
添加服务提供者:打开
config/app.php
并将KamranAhmed\Laraformer\TransformerServiceProvder::class
添加到 providers 数组的末尾'providers' => array( .... KamranAhmed\Laraformer\TransformerServiceProvder::class, ),
如何使用
安装将自动设置使用此包所需的一切。让我们现在进入真正的内容,好吗?!
转换模型
只需将转换器逻辑添加到模型中名为
transform
的方法中,并直接响应模型/模型的集合/分页模型响应。
您可以通过以下两种方式之一转换模型
- 自动转换响应
- 手动转换响应
让我通过一个示例来解释用法。
示例
示例表/集合 假设我们有一个名为 users
的表/集合,相关模型称为 User
。该表/集合看起来如下
所需输出 这是我们需要的结果
[ { "public_id": "x72sl1", "name": "John Doe", "slug": "john-doe", "occupation": "Engineer", "is_admin": true, "joined_on": "2 days ago", "profile_design": [ { "theme_name": "larology", "fields": [ { "type": "integer", "name": "some-dummy-field" } ] } ] } ]
模型 为了生成上述输出,您只需在模型中添加一个 transform
方法即可,例如:
class User extends Eloquent { ... public function transform(User $user) { return [ 'public_id' => $this->amalgamate($user->id), 'name' => $user->name, 'slug' => str_slugify($user->name), 'occupation' => $user->profession, 'is_admin' => (bool) $user->is_admin, 'joined_on' => DateHelper::humanize($user->created_at), 'profile_design' => json_decode($user->design_options, true) ]; } }
a) 自动转换响应
对于自动转换,您只需直接返回模型即可,即模型对象、模型集合或分页模型响应。例如,控制器可能看起来如下
class UserController extends Controller { ... // Works well with model object public function show($id) { return User::find($id); } ... // Or you can return the collection public function all() { return User::all(); } ... // Also paginated data is gracefully handled public function paginate() { return User::paginate(10); } }
b) 手动转换
如果您想将模型数据转换为内部使用,您也可以这样做。为此,您可以使用提供的门面 \KamranAhmed\Laraformer\Facades\Transformer
通过别名 Laraformer
来执行。例如:
// Use the registered alias $user = User::find(120); $transformedUser = Laraformer::transformModel($user); // Do something with $transformedUser
注意,您仍然需要在模型中指定 transform
方法。
转换任何数据集
不仅限于模型,您还可以使用 laraformer 转换任何类型的数据集,无论是来自外部源的数据,还是您魔术般生成的数据集等。为了做到这一点,您可以执行以下操作之一。
- 传递具有
transform
方法的转换器类的对象 - 传递回调函数
例如
// Transforming using callback function return Laraformer::forceTransform($dataset, function ($item) { return [ 'name' => $item['name'], 'slug' => str_slugify($item['name']), 'occupation' => $item['profession'], 'is_admin' => (bool) $item['is_admin'], 'joined_on' => DateHelper::humanize($item['created_at']), 'profile_design' => json_decode($item['design_options'], true) ]; }) // Transforming using Transformer class object $userTransformer = new UserTransformer; return Laraformer::forceTransform($dataset, $userTransformer)
贡献
- 请随意添加一些新功能、改进现有功能等,并提交一个拉取请求说明您所做的工作。
- 在 问题部分 报告任何问题
- 您还可以直接通过以下邮箱与我联系,并提出任何反馈:kamranahmed.se@gmail.com