命令行下, 执行 composer 命令安装:
composer require jundayw/laravel-render-provider
authentication package that is simple and enjoyable to use.
replace(string $oldKey, string $newKey): $this
$this->replace('message','msg');
hidden(mixed $hiddens): $this
$this->hidden('message');
$this->hidden('message','data');
$this->hidden(['message','data']);
forget(mixed $forgets): $this
$this->forget('message');
$this->forget('message','data');
$this->forget(['message','data']);
with(string $key, mixed $value): $this
$this->with('message','ok');
withXxx($value): $this
$this->withMsg('ok');
reset(): $this
$this->reset();
flush(): $this
$this->flush();
data(array $data = [], bool $append = false): $this
$this->data(['message'=>'message','state'=>true]);
all(bool $hidden = true): array
$this->all();
$this->all(true); // 隐藏键值已过滤
$this->all(false); // 隐藏键值未过滤
get(string $key): mixed
$this->get('message');
response(?callable $response = null): mixed
$this->response();
json(?int $status = 200, ?array $headers = [], ?int $options = JSON_UNESCAPED_UNICODE): $this
$this->json();
jsonp(?string $callback = 'jsonp', ?int $status = 200, ?array $headers = [], ?int $options = JSON_UNESCAPED_UNICODE): $this
$this->jsonp();
success(?string $message = 'SUCCESS', ?string $url = null, mixed $data = null): $this
$this->success();
error(?string $error = 'ERROR', ?string $url = null, mixed $errors = null): $this
$this->error();
macro($name, $macro): mixed
Render::macro('sign',function($name){
return $this->with($name,md5(http_build_query($this->all())));
});
// 获取签名数据
$data = Render::reset()->success('ok')->sign('token')->all();
// 响应数据
return Render::success('ok')->sign('token')->response();
return Render::success('ok', 'url...', 'data...')->response();
{
"state": true,
"message": "ok",
"url": "url...",
"data": "data...",
"timestamp": "2022-01-10T06:04:29Z"
}
return Render::error('error', 'url...', 'data...')->response();
{
"state": false,
"error": "error",
"url": "url...",
"errors": "data...",
"timestamp": "2022-01-10T06:03:50Z"
}
将响应数据中键值 timestamp 替换为 time
return Render::success('success', 'url...', 'data...')
->replace('timestamp', 'time')
->response();
{
"state": true,
"message": "ok",
"url": "url...",
"data": "data...",
"time": "2022-01-10T06:09:21Z"
}
若响应数据中键值 timestamp、url 不需要,可将其移除
return Render::success('success', 'url...', 'data...')
->forget('timestamp', 'url')
->response();
{
"state": true,
"message": "ok",
"data": "data..."
}
若响应数据中需要新增字段,可使用 with 方法
return Render::success('success', 'url...', 'data...')
->with('appid', '...id...')
->with('appkey', '...key...')
->response();
{
"state": true,
"message": "ok",
"url": "url...",
"data": "data...",
"timestamp": "2022-01-10T06:15:08Z",
"appid": "...id...",
"appkey": "...key..."
}
若响应数据中需要对敏感数据进行处理,可使用 hidden 方法
return Render::success('success', 'url...', 'data...')
->with('appid', '...id...')
->with('appkey', '...key...')
->hidden('appkey')
->response();
{
"state": true,
"message": "ok",
"url": "url...",
"data": "data...",
"timestamp": "2022-01-10T06:20:04Z",
"appid": "...id..."
}
将响应数据及 appid、appkey 进行签名,并且响应数据中不显示 appkey 字段
Render::macro('sign', function($name) {
$data = $this->all(false);// 获取所有数据包含隐藏字段 appkey
return $this->with($name, md5(http_build_query($data)));// 数据签名方式可根据具体业务自定义
});
return Render::success('ok', 'url...', 'data...')
->with('appid', '...id...')
->with('appkey', '...key...')
->hidden('appkey')
->sign('token')
->response();
{
"state": true,
"message": "ok",
"url": "url...",
"data": "data...",
"timestamp": "2022-01-10T06:30:18Z",
"appid": "...id...",
"token": "f6ef314a3c1acd6e80f6e3b1858b6778"
}
return Render::success('ok', 'url...', 'data...')
->json()
->response();
{
"state": true,
"message": "ok",
"url": "url...",
"data": "data...",
"timestamp": "2022-01-10T06:37:26Z"
}
return Render::success('ok', 'url...', 'data...')
->jsonp()
->response();
jsonp({
"state": true,
"message": "ok",
"url": "url...",
"data": "data...",
"timestamp": "2022-01-10T06:36:42Z"
});
Render::macro('format', function(callable $callable){
$this->format = function($data) use ($callable){
return $callable($data);
};
return $this;
});
return Render::success('ok', 'url...', 'data...')
->format(function($data){
return var_export($data, true);// 根据响应格式实现具体方法即可
})
->response();
array (
'state' => true,
'message' => 'ok',
'url' => 'url...',
'data' => 'data...',
'timestamp' => '2022-01-10T06:49:45Z',
)
return Render::success('ok', 'url...', 'data...')
->response(function($data){
return var_export($data, true);
});
array (
'state' => true,
'message' => 'ok',
'url' => 'url...',
'data' => 'data...',
'timestamp' => '2022-01-10T06:51:50Z',
)
应用包已扩展 success/error 方法,若不适用业务场景,可通过 Render::flush() 方法格式化后自行定义。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Jundayw\LaravelRenderProvider\Support\Facades\Render;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Render::flush();
Render::macro('success', function(?string $message = 'SUCCESS', ?string $url = null, mixed $data = null) {
return $this->data([
'state' => true,
'message' => $message,
'url' => $url,
'data' => $data,
'timestamp' => date('Y-m-d\TH:i:s\Z'),
], true);
});
Render::macro('error', function(?string $error = 'ERROR', ?string $url = null, mixed $errors = null) {
return $this->data([
'state' => false,
'error' => $error,
'url' => $url,
'errors' => $errors,
'timestamp' => date('Y-m-d\TH:i:s\Z'),
], true);
});
}
}
调用方式
return Render::reset()->success('ok', 'url...', 'data...')->with('code', 4)->response();
return Render::reset()->error('error', 'url...', 'data...')->with('code', 4)->response();
namespace App\Providers;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\ServiceProvider;
use Jundayw\LaravelRenderProvider\Support\Facades\Render;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Response::macro('success', function(?string $message = 'SUCCESS', ?string $url = null, mixed $data = null) {
return Render::reset()
->data([
'state' => true,
'message' => $message,
'url' => $url,
'data' => $data,
'timestamp' => date('Y-m-d\TH:i:s\Z'),
], true);
});
Response::macro('error', function(?string $error = 'ERROR', ?string $url = null, mixed $errors = null) {
return Render::reset()
->data([
'state' => false,
'error' => $error,
'url' => $url,
'errors' => $errors,
'timestamp' => date('Y-m-d\TH:i:s\Z'),
], true);
});
}
}
调用方式
return response()->success('ok', 'url...', 'data...')->with('code', 4)->response();
return response()->error('error', 'url...', 'data...')->with('code', 4)->response();
$data = [
'state' => true,
'message' => 'SUCCESS',
];
return Render::data($data)
->with('code', 200)
->response();
{
"state": true,
"message": "SUCCESS",
"code": 200
}
为防止目标数据与预期数据不一致,推荐链式操作优先级:
$render = Render::reset() // 防止数据混淆
->data([], false) // 批量覆盖模式
//->success()->error() // 方法优先级相同
->data([], true) // 批量追加模式
->with('forget', 'forget')
->with('hidden', 'hidden')
->with('code', 200)
->forget('forget')->hidden('hidden')->replace('code', 'status');// 方法优先级相同
return $render->get('status');
return $render->all();
return $render
->json()->jsonp() // 方法优先级相同
->response();
return Render::reset() // 防止数据混淆
->data([], false) // 批量覆盖模式
//->success()->error() // 方法优先级相同
->data([], true) // 批量追加模式
->with('forget', 'forget')
->with('hidden', 'hidden')
->with('code', 200)
->forget('forget')->hidden('hidden')->replace('code', 'status')// 方法优先级相同
->json()->jsonp() // 方法优先级相同
->response(); // response 为防止数据混淆,内部已经调用 reset() 方法