php - Laravel 5 - 在 Rest API 服务器上自定义 JSON 响应

标签 php json laravel-5

我是 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/

相关文章:

php - Drupal:分层分类面包屑路径

php - 在 PHP 中,使用 DomDocument getElementByID 不起作用?我究竟做错了什么?

php - 字符串字符串和 PDO

java - AWS Lambda Java 返回带斜杠的字符串

java - 使用 jason.simple 将用户定义的数据类型转换为 JSON 对象类型

php - 在php中对上传文件的哈希内容

php - Laravel 5.0,迁移 : how to make integer not a primary key?

php - create_function() 参数中 undefined variable ?

JSON 架构 - 除了架构中声明的字段之外,实例没有其他字段

php - 在 Laravel 5 中从数据库渲染 html 图像标签