thomzee/laramap

Laravel REST API 响应映射器。

安装: 45

依赖者: 0

建议者: 0

安全: 0

星标: 3

关注者: 1

分支: 2

公开问题: 0

类型:软件包

v1.4.0 2020-10-01 18:19 UTC

This package is auto-updated.

Last update: 2024-09-29 05:28:36 UTC


README

SymfonyInsight Latest Stable Version Total Downloads Latest Unstable Version License

Laramap

简介

每个 Laravel API 项目都需要一张地图来避免在响应丛林中迷失。Laramap 是一个 Laravel 扩展包,用于对象或数组映射,以便更轻松、更干净地提供成熟的 REST API 响应。

安装

您可以选择以下两种安装方法中的一种。

1. 自动安装

进入您的项目根目录 laravel

cd YOUR_LARAVEL_ROOT_PROJECT/

然后使用以下命令获取项目上 Laramap 的最新版本。

composer require thomzee/laramap

2. 手动安装

或者,您可以直接更新您的 composer.json 文件,如下所示

"require": {
    . . .
    "thomzee/laramap": "dev-master"
},

b. 然后运行 composer install 命令。

注册服务

首先,您需要在项目的配置文件 config/app.php 中注册服务提供者

'providers' => [
    . . .
    Thomzee\Laramap\LaramapServiceProvider::class,
]

并在同一文件中注册外观

'aliases' => [
    . . .
    'Laramap' => Thomzee\Laramap\Facades\Laramap::class,
]

运行 composer dump-autoload 命令以更新项目配置文件中的更改。

composer dump-autoload

映射器类生成器

请确保存在 php artisan make:mapper,并使用以下命令列出 artisan 命令

php artisan list

然后使用 artisan 命令生成映射器文件,例如

php artisan make:mapper UserMapper

更新 single() 方法的内容。数组键是响应的属性,而 $item 是单个对象或数组的表示,例如

function single($item)
{
    return [
        "name" => $item->name,
        "email" => $item->email,
        "join_date" => $item->created_at,
    ];
}

功能

在您的控制器类上方导入软件包。

use Laramap;

就是这样。这是因为您已在项目配置文件中注册了软件包。

1. 分页数据

获取带有分页信息的分页数据列表。第一个参数必须是您之前生成的映射器类,第二个参数必须是 Illuminate\Contracts\Pagination\Paginator 的实例。您可以在调用 paginate() 函数之前执行 where 子句和其他查询构建器函数。

public function index()
{
    return Laramap::paged(\App\Mappers\UserMapper::class, \App\User::paginate(10));
}

上面的代码使用我们之前创建的映射器,即 UserMapper 类,结果如下所示

{
    "meta": {
        "code": 200,
        "status": "success",
        "message": "Operation successfully executed."
    },
    "pages": {
        "per_page": 10,
        "current_page": 1,
        "last_page": 1,
        "has_more_pages": false,
        "from": 1,
        "to": 3
    },
    "links": {
        "self": 10,
        "next": null,
        "prev": null
    },
    "data": [
        {
            "name": Alex
        },
        {
            "name": Thomas
        },
        {
            "name": Uje
        }
    ]
}

2. 单个数据

获取单个对象或数组。您甚至可以用 Laravel 集合填充它

public function show($id)
{
    return Laramap::single(\App\Mappers\UserMapper::class, \App\User::find($id));
}

结果如下所示

{
    "meta": {
        "code": 200,
        "status": "success",
        "message": "Operation successfully executed."
    },
    "data": {
        "name": Thomas
    }
}

3. 列表数据

获取不带分页项的列表数据(数组数据),如下例代码所示

public function all()
{
    return Laramap::list(\App\Mappers\UserMapper::class, \App\User::paginate(10));
}

结果如下所示。

{
    "meta": {
        "code": 200,
        "status": "success",
        "message": "Operation successfully executed."
    },
    "data": [
        {
            "name": Alex
        },
        {
            "name": Thomas
        },
        {
            "name": Uje
        }
    ]
}

4. 成功响应

响应成功元数据,无参数。

public function all()
{
    return Laramap::success();
}

4. 错误响应

或错误元数据。

public function all()
{
    return Laramap::error();
}

5. 验证响应

响应 Laravel 验证错误包

$validator = Validator::make($request->all(), [
    'foo' => 'required',
    'bar' => 'required'
]);
if ($validator->fails()) {
    return Laramap::validation($validator);
}

结果如下

{
    "meta": {
        "code": 422,
        "status": "validation_error",
        "message": "Oops, something went wrong.",
        "errors": {
            "foo": [
                "The foo field is required."
            ],
            "bar": [
                "The bar field is required."
            ]
        }
    }
}

许可

此软件包是开源软件,许可协议为 MIT 许可。