Laravel 4 возвращает json в качестве ответа


Laravel 4 возвращает json в качестве ответа

09.10.2020 05:46:19 Просмотров 6 Источник

Я работаю на старой системе - laravel 4.1/4.2 - мой контроллер возвращает номер в ответ:

return 4;

но браузер показывает Content-Type: text/html (не json), и debugbar добавляет также некоторый html к этому ответу.

Когда я попробую это сделать из laravel doc:

return Response::json(['result' => 4 ]);

Я получаю ошибку (я в РНР контроллер файл у меня use Symfony\Component\HttpFoundation\Response; )

Вызов неопределенного метода Symfony\Component\HttpFoundation\Response::json()

Я также стараюсь использовать

$response = new Response(200, array(), ['result' => 4]);
return $response->json();

но я получаю

Код состояния HTTP "0" недопустим.

Как получить json в ответ (без отладочной панели)?


Обновление: (я тестирую предложение от комментария Тима Левиса)

Когда я пытаюсь (с и без use Response)

return response()->json(['result' => 4], 200);

Я получаю

Вызов неопределенной функции App\Controllers\Api\response()


Update2: кто - то предположил, что уже есть ответ для Laravel 5 - который на самом деле работает в L4 - но это случайно, я думаю-обычно решения L5 не работают на L4, поэтому мы не должны смешивать эти две версии фреймворка

У вопроса есть решение - Посмотреть?

Ответы - Laravel 4 возвращает json в качестве ответа / Laravel 4 return json as response

Kamil Kiełczewski

09.10.2020 05:46:19

Случайно я обнаружил, что когда я возвращаю массив

return ['result' => 4 ];

тогда у ответа есть Content-Type: application/json и нет материала debugbar - я понятия не имею, почему - но он работает :)

Является ответом!
Tim Lewis

09.10.2020 07:48:35

Response::json() должен работать в Laravel 4.2, так как версии до 5 использовали фасады (Response::) вместо глобальных методов (response()).

Главная проблема здесь заключается в том, что импортированный класс Response-это не фасад, а скорее симфонический компонент. Чтобы устранить эту проблему, используйте правильный импорт:

use Response; // Illuminate\Support\Facades\Response (or Laravel 4.2 equivalent)

class ExampleController extends Controller {
  public function exampleRequest(){
    return Response::json(['result' => 4], 200);
  }
}

Sidenote; return ['result' => 4]; "работает", так как Laravel угадывает тип контента для операторов return в контроллерах, но лучше быть конкретным, чтобы избежать каких-либо проблем.


Обновление: вы можете использовать ярлык, который работает без оператора use Response

return \Response::json(4);`
Помочь в развитии проекта:
Закрыть X