如何在Laravel中添加响应HTTP数据?

时间:2017-02-18 21:04:39

标签: laravel laravel-5.4

现在,为了获取数据,我从控制器调用方法,将数据返回为JSON:

return response()->json([$data]);

我可以在此响应中添加全局数据吗?并合并$data

例如,我想在每个HTTP响应中提供全局$user对象,以避免每个方法中的以下条目:

return response()->json(["data" => $data, "user" => $user]);

2 个答案:

答案 0 :(得分:6)

@ rnj的答案的替代方案是使用中间件。

https://laravel.com/docs/5.4/middleware#global-middleware

这样您就可以转而使用请求,而不是使用您可能决定以后不需要/需要的帮助函数。

中间件的handle方法可能类似于:

public function handle($request, Closure $next)
{
    $response = $next($request);

    $content = json_decode($response->content(), true);

    //Check if the response is JSON
    if (json_last_error() == JSON_ERROR_NONE) {

        $response->setContent(array_merge(
            $content,
            [
                //extra data goes here
            ]
        ));

    }

    return $response;
}

希望这有帮助!

答案 1 :(得分:2)

创建您自己的PHP类或函数,以使用您自己的数据包装Laravel的响应。例如:

function jsonResponse($data)
{
    return response()->json([
        'user' => $user, 
        'data' => $data,
    ]);
}

然后你可以打电话:

return jsonResponse($data);

这只是一个如何保存程序DRY的简单示例。如果您正在创建一个您希望增长和维护的应用程序,请执行更像this的操作。