如何在 Laravel 中正确返回 JSON 响应?

jay*_*dez 1 php response laravel laravel-6

    return response()->json([
        'message' => 'No new orders!'
    ]);
Run Code Online (Sandbox Code Playgroud)

不幸的是,此响应不起作用?理想情况下,我想返回一个带有“消息”=>“没有新订单!”的 JSON 响应。状态码为 204 No Content。

我在控制器中有这 2 个包含文件...

use OhMyBrew\BasicShopifyAPI;
use GuzzleHttp\Client;
Run Code Online (Sandbox Code Playgroud)

这利用了来自vendor/laravel/framework/src/Illuminate/foundation/helpers.php 的这个内置帮助

if (! function_exists('response')) {
    /**
     * Return a new response from the application.
     *
     * @param  \Illuminate\View\View|string|array|null  $content
     * @param  int     $status
     * @param  array   $headers
     * @return \Illuminate\Http\Response|\Illuminate\Contracts\Routing\ResponseFactory
     */
    function response($content = '', $status = 200, array $headers = [])
    {
        $factory = app(ResponseFactory::class);

        if (func_num_args() === 0) {
            return $factory;
        }

        return $factory->make($content, $status, $headers);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*rna 7

要将数据返回为 json.. 只需执行以下操作:

public function myCoolFunction()
{
    $data = ['message' => 'No new orders!'];

    return response()->json($data, 204);
}
Run Code Online (Sandbox Code Playgroud)

文档

JSON 响应

json 方法将自动将Content-Type标头设置为 application/json,并使用json_encodePHP 函数将给定数组转换为 JSON :

return response()->json([
    'name' => 'Abigail',
    'state' => 'CA'
]);
Run Code Online (Sandbox Code Playgroud)

PS:返回的默认响应代码是200,因此,如果您想返回 200 响应代码,则可以省略第二个参数。


请注意,为了以 json 格式接收错误详细信息,您的前端会发出请求,告诉您的后端它需要 json 响应,这将有所帮助。为此,请在发出请求时添加此标头:

accept: application/json
Run Code Online (Sandbox Code Playgroud)

更多信息


小智 2

如果由于某种原因响应助手不起作用,您可以使用以下方法:

https://laravel.com/api/5.8/Illuminate/Contracts/Routing/ResponseFactory.html#method_json

基本上:

use Illuminate\Support\Facades\Response;

return Response::json(['data' => 'data'], 200);
Run Code Online (Sandbox Code Playgroud)