Как правильно вернуть JSON Response в Laravel? - PullRequest
0 голосов
/ 24 октября 2019
    return response()->json([
        'message' => 'No new orders!'
    ]);

К сожалению, этот ответ не работает? В идеале я хотел бы вернуть JSON-ответ с сообщением «Message» => «Нет новых заказов!»с кодом состояния 204. Нет содержимого.

У меня есть эти 2 включенных файла в контроллере ...

use OhMyBrew\BasicShopifyAPI;
use GuzzleHttp\Client;

При этом используется этот встроенный помощник от поставщика/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);
    }
}

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

Чтобы вернуть данные как json .. просто сделайте это:

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

    return response()->json($data, 204);
}

Из документации :

Ответы JSON

Метод json автоматически установит заголовок Content-Type на application/json, а также преобразует данный массив в JSON с помощью PHP-функции json_encode:

return response()->json([
    'name' => 'Abigail',
    'state' => 'CA'
]);

PS: ответ по умолчаниювозвращаемый код 200, поэтому, если вы хотите вернуть код ответа 200, вы можете пропустить второй параметр.


Обратите внимание, что для получения сведений об ошибках в формате json,это поможет вашему внешнему интерфейсу сделать запрос, сообщающий вашему бэкэнду, что он ожидает ответа json. Для этого добавьте этот заголовок при отправке запросов:

accept: application/json

Подробнее

0 голосов
/ 24 октября 2019

Дело в том, что контент не будет работать, когда вы используете код 204. Поскольку вы написали статус 204, это означает, что контент отсутствует, поэтому, если вы поместите какой-либо контент, он не будет использоваться.

Так что если вам нужно вернутьсясодержание из вашего ответа, вам нужно использовать другой код состояния (например, 200).

Однако:

 return response()->json([
        'message' => 'No new orders!'
    ]);

должно работать без проблем, потому что здесь используется статус 200, так что если он нене работает удалить каталог vendor и запустить снова composer install, потому что, возможно, вы случайно внесли некоторые изменения в каталог поставщика. Также вам следует проверить файл журнала, хранящийся в каталоге storage/logs, чтобы убедиться в реальной проблеме.

0 голосов
/ 24 октября 2019

Если по какой-то причине вспомогательный ответ не работает, вы можете использовать это:

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

В основном:

use Illuminate\Support\Facades\Response;

return Response::json(['data' => 'data'], 200);
...