我是 Laravel 的新手,我正在将我的应用程序从 Slim Framework 迁移到 Laravel 5。
谷歌搜索我没有找到太多关于如何自定义 JSON 响应的信息。假设我有:
型号
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $visible = [
'username', 'posts',
];
}
Controller
<?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 中解决了这个问题吗?
注意我知道我可以编写一个中间件来“修改”响应,但我不确定这是正确的解决方案,而且检查中间件是否应包含错误也很痛苦。
谢谢你。
最佳答案
是一个有点晚的回应,但也许它会进一步帮助某人。
您可以使用 Response Factory 在您的项目中创建 Provider 来解决此问题,这里是 的示例。成功和 错误 回应:
<?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 值上添加类:
'providers' => [
...
App\Providers\ResponseServiceProvider::class,
]
大功告成,因为提供者已经聚合,您可以使用 调用宏响应助手 传递各自的属性。例如:
$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');
}
关于php - Laravel 5 - 在 Rest API 服务器上自定义 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35240772/