PHPackages                             jundayw/laravel-render-provider - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. jundayw/laravel-render-provider

ActiveLibrary[API Development](/categories/api)

jundayw/laravel-render-provider
===============================

laravel render provider

v6.0.0(1mo ago)12.3kMITPHPPHP ^8.0

Since Jun 12Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/jundayw/laravel-render-provider)[ Packagist](https://packagist.org/packages/jundayw/laravel-render-provider)[ Docs](https://github.com/jundayw/laravel-render-provider)[ RSS](/packages/jundayw-laravel-render-provider/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (16)Used By (0)

Laravel Render Provider
=======================

[](#laravel-render-provider)

Laravel 响应数据格式化服务提供者，它提供了一个链式、灵活、可扩展的响应数据构建工具，非常适合 API 返回场景。

[![GitHub Tag](https://camo.githubusercontent.com/22c3916d6185e616741599e59ee6c7e68e7e9004f3083ff6b1b1adede8acfe22/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f6a756e646179772f6c61726176656c2d72656e6465722d70726f7669646572)](https://github.com/jundayw/laravel-render-provider/tags)[![Total Downloads](https://camo.githubusercontent.com/7581f18dbe795656f670af011d333218666cfff83018ace6462a0ba07c3fd722/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6a756e646179772f6c61726176656c2d72656e6465722d70726f76696465723f7374796c653d666c61742d737175617265)](https://packagist.org/packages/jundayw/laravel-render-provider)[![Packagist Version](https://camo.githubusercontent.com/ec3ba2f323302a6ae5eccd91c12535df8fdda2561d79c3e041a578cb1d71dab5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a756e646179772f6c61726176656c2d72656e6465722d70726f7669646572)](https://packagist.org/packages/jundayw/laravel-render-provider)[![Packagist PHP Version Support](https://camo.githubusercontent.com/e25e46deeee1355d32ff6cf69fcb2a32da09811f4297aae88bca3eb4b8403d15/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6a756e646179772f6c61726176656c2d72656e6465722d70726f7669646572)](https://github.com/jundayw/laravel-render-provider)[![Packagist License](https://camo.githubusercontent.com/00de0991a53d9e1127d5bfab5465d195e27b7cd440a7105bf31962e6c404600a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6a756e646179772f6c61726176656c2d72656e6465722d70726f7669646572)](https://github.com/jundayw/laravel-render-provider)

主要特性
====

[](#主要特性)

1. **规范 API 响应格式**： 适用于中大型 Laravel 应用中统一所有接口的响应结构，便于前后端协作与调试。
2. **隐藏敏感字段而不丢失数据签名能力**： 可通过 `all(false)` 保留隐藏字段进行签名再输出，避免签名丢失完整性。
3. **扩展性强**： 任意响应格式（如 XML、Markdown、HTML 预览）都可通过 `macro` 或重写 `response()` 灵活实现。

安装方法
====

[](#安装方法)

命令行下, 执行 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');
```

隐藏键值
----

[](#隐藏键值)

hide(mixed $hides): $this

```
$this->hide('message');
$this->hide('message','data');
$this->hide(['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');
```

追加数据
----

[](#追加数据-1)

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
----

[](#json)

json(?int $status = 200, ?array $headers = \[\], ?int $options = JSON\_UNESCAPED\_UNICODE): $this

```
$this->json();
```

JSONP
-----

[](#jsonp)

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::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"
}
```

替换键值
----

[](#替换键值-1)

将响应数据中键值 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"
}
```

移除键值
----

[](#移除键值-1)

若响应数据中键值 timestamp、url 不需要，可将其移除

```
return Render::success('success', 'url...', 'data...')
    ->forget('timestamp', 'url')
    ->response();
```

```
{
    "state": true,
    "message": "ok",
    "data": "data..."
}
```

追加数据
----

[](#追加数据-2)

若响应数据中需要新增字段，可使用 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..."
}
```

隐藏键值
----

[](#隐藏键值-1)

若响应数据中需要对敏感数据进行处理，可使用 hide 方法

```
return Render::success('success', 'url...', 'data...')
    ->with('appid', '...id...')
    ->with('appkey', '...key...')
    ->hide('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...')
    ->hide('appkey')
    ->sign('token')
    ->response();
```

```
{
    "state": true,
    "message": "ok",
    "url": "url...",
    "data": "data...",
    "timestamp": "2022-01-10T06:30:18Z",
    "appid": "...id...",
    "token": "f6ef314a3c1acd6e80f6e3b1858b6778"
}
```

响应场景
====

[](#响应场景)

默认响应数据格式 json
-------------

[](#默认响应数据格式-json)

```
return Render::success('ok', 'url...', 'data...')
    ->json()
    ->response();
```

```
{
    "state": true,
    "message": "ok",
    "url": "url...",
    "data": "data...",
    "timestamp": "2022-01-10T06:37:26Z"
}
```

响应数据格式 jsonp
------------

[](#响应数据格式-jsonp)

```
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',
)
```

扩展响应数据格式：response 方法扩展
----------------------

[](#扩展响应数据格式response-方法扩展)

### 不含隐藏字段

[](#不含隐藏字段)

```
return Render::success('ok', 'url...', 'data...')
    ->response(function($data){
        return var_export($data, true);
    });
```

### 含隐藏字段

[](#含隐藏字段)

```
return Render::success('ok', 'url...', 'data...')
    ->response(function($data){
        return var_dump($this->all(), true);
    });
```

```
array (
  'state' => true,
  'message' => 'ok',
  'url' => 'url...',
  'data' => 'data...',
  'timestamp' => '2022-01-10T06:51:50Z',
)
```

宏场景
===

[](#宏场景)

RenderFacade
------------

[](#renderfacade)

应用包已扩展 success/error 方法，若不适用业务场景，可通过 Render::flush() 方法格式化后自行定义。

```
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Jundayw\Render\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::success('ok', 'url...', 'data...')->with('code', 4)->response();
return Render::error('error', 'url...', 'data...')->with('code', 4)->response();
```

ResponseFacade
--------------

[](#responsefacade)

```
namespace App\Providers;

use Illuminate\Support\Facades\Response;
use Illuminate\Support\ServiceProvider;
use Jundayw\Render\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('hide', 'hide')
    ->with('code', 200)
    ->forget('forget')->hide('hide')->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('hide', 'hide')
    ->with('code', 200)
    ->forget('forget')->hide('hide')->replace('code', 'status')// 方法优先级相同
    ->json()->jsonp()           // 方法优先级相同
    ->response();               // response 为防止数据混淆，内部已经调用 reset() 方法
```

###  Health Score

49

—

FairBetter than 95% of packages

Maintenance89

Actively maintained with recent releases

Popularity19

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~150 days

Recently: every ~78 days

Total

15

Last Release

55d ago

Major Versions

v1.0.0 → v2.0.02020-07-23

v2.0.0 → v3.0.02022-01-11

3.x-dev → v4.0.02025-04-09

4.x-dev → v5.0.02025-11-19

5.x-dev → v6.0.02026-03-18

PHP version history (3 changes)v1.0.0PHP &gt;=7.2.0

v4.1.0PHP &gt;=7.4

v5.0.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/2da9b458375a1b7972b7c4d26a5bf8f3e48db305e8805da36f253956f33c5568?d=identicon)[jundayw](/maintainers/jundayw)

---

Top Contributors

[![jundayw](https://avatars.githubusercontent.com/u/16873970?v=4)](https://github.com/jundayw "jundayw (19 commits)")

---

Tags

apilaravelrender

### Embed Badge

![Health badge](/badges/jundayw-laravel-render-provider/health.svg)

```
[![Health](https://phpackages.com/badges/jundayw-laravel-render-provider/health.svg)](https://phpackages.com/packages/jundayw-laravel-render-provider)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[knplabs/github-api

GitHub API v3 client

2.2k15.8M187](/packages/knplabs-github-api)[facebook/php-business-sdk

PHP SDK for Facebook Business

90121.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

73813.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
