Laravel 5 - 在 Rest API 服务器上自定义 JSON 响应
Posted
技术标签:
【中文标题】Laravel 5 - 在 Rest API 服务器上自定义 JSON 响应【英文标题】:Laravel 5 - Customize JSON response on a Rest API server 【发布时间】:2016-05-16 09:52:25 【问题描述】:我是 Laravel 的新手,我正在将我的应用程序从 Slim 框架迁移到 Laravel 5。 谷歌搜索我没有找到太多关于如何自定义 JSON 响应的信息。假设我有:
型号
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
protected $visible = [
'username', 'posts',
];
控制器
<?php
namespace App\Http\Controllers;
use [...]
/* *
* Implicit controller
*/
class UserController extends Controller
public function getIndex()
return response()->json(User::all(), 200);
路线
Route::controller('users', 'UserController');
如果我想在 JSON 对象中输出该数据,例如:
"success": bool, "message": string, "data": array
// in this case 'array' would be User::all()
?
有谁知道是否有一个库来处理这种东西?或者有没有人已经以某种方式在 laravel 中解决了这个问题?
注意我知道我可以编写一个中间件来“修改”响应,但我不确定它是否是正确的解决方案,而且检查中间件是否应该包含错误也很痛苦。
谢谢。
【问题讨论】:
【参考方案1】:回复有点晚,但也许对其他人有帮助。
您可以通过在您的项目中创建提供程序的响应工厂来解决此问题,这里是 Success 和 Error 响应的示例:
<?php
// Place this file on the Providers folder of your project
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\ResponseFactory;
class ResponseServiceProvider extends ServiceProvider
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(ResponseFactory $factory)
$factory->macro('success', function ($message = '', $data = null) use ($factory)
$format = [
'status' => 'ok',
'message' => $message,
'data' => $data,
];
return $factory->make($format);
);
$factory->macro('error', function (string $message = '', $errors = []) use ($factory)
$format = [
'status' => 'error',
'message' => $message,
'errors' => $errors,
];
return $factory->make($format);
);
/**
* Register the application services.
*
* @return void
*/
public function register()
//
然后在 config/app.php 中的提供者值上添加类:
'providers' => [
...
App\Providers\ResponseServiceProvider::class,
]
它已经完成了,因为提供者已经被聚合,你可以使用 response helper 调用宏来传递各自的属性。例如:
$user = User::find(1);
if($user)
return response()->success('Your custom success message', $user);
else
return response()->error('Your custom error message', 'Validation errors or else');
【讨论】:
【参考方案2】:你试过了吗
return response()->json([
'success'=>true,
'message'=>'string',
'data'=>User::all()
]);
?
【讨论】:
当然,如果我对该数组进行 json_encode 而不仅仅是 User:all() .... 这是我目前在 Slim 上使用的方法。我有一个接受数据的静态函数和错误参数,并相应地返回响应数组......我正在寻找的是 Laravel 内置的东西......谢谢您的关注以上是关于Laravel 5 - 在 Rest API 服务器上自定义 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章
laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证