kamranahmedse/laraformer

Laravel 包,帮助您轻松地在应用程序中实现转换器逻辑

v1.0.0 2016-03-04 14:31 UTC

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