thomzee / laramap
Laravel REST API 响应映射器。
Requires
- php: >=5.4
- illuminate/contracts: 5.x|6.x|7.x|8.x
- illuminate/database: 5.x|6.x|7.x|8.x
- illuminate/http: 5.x|6.x|7.x|8.x
- illuminate/support: 5.x|6.x|7.x|8.x
This package is auto-updated.
Last update: 2024-09-29 05:28:36 UTC
README
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 许可。