HTTP-ответы
Каждый маршрут и контроллер в Imhotep должен возвращать HTTP-ответ. Фреймворк предлагает несколько способов формирования ответов — от простейших до максимально гибких.
Простые ответы
Верните строку - Imhotep автоматически преобразует её в полноценный HTTP-ответ:
Route::get('/', function () {
return 'Hello World';
});
Нужен JSON? Верните массив или любой объект, реализующий JsonSerializable, ArrayObject, Arrayable или Jsonable:
Route::get('/api/data', function () {
return ['one', 'two', 'three'];
});
Imhotep определит, что это JSON, и самостоятельно установит заголовок Content-Type: application/json.
Объект Response
Когда требуется полный контроль над статусом, заголовками или кодировкой, используйте Imhotep\Http\Response.
Проще всего создать ответ через хелпер response(), который принимает три аргумента: содержимое ответа, HTTP-статус и массив заголовков:
Route::get('/', function () {
return response(
content: 'Контент',
status: 201,
headers: ['Content-Type' => 'text/plain']
);
});
Доступен и более выразительный цепочечный интерфейс:
Route::get('/', function () {
return response('Hello World')
->setStatus('201') // Created
->setHeader('X-Custom', 'Value')
->setHeader('Content-Type', 'text/plain')
->setHeaders([
'X-One' => '1',
'X-Two' => '2',
]);
});
Заголовки можно проверять, получать и удалять:
if ($response->hasHeader('X-Custom')) {
$value = $response->header('X-Custom');
$response->removeHeader('X-Custom');
}
JSON ответы
Для возврата JSON в Imhotep предусмотрен Imhotep\Http\JsonResponse. Удобнее всего использовать хелпер response()->json():
return response()->json([
'user' => $user,
'token' => $token
]);
Статус и заголовки передаются вторым и третьим аргументами:
return response()->json($data, 201, ['X-Request-ID' => $id]);
Для JSONP-ответов используйте метод jsonp():
return response()->jsonp('callback', $data);
Imhotep автоматически проверит имя callback-функции на недопустимые символы и зарезервированные слова JavaScript.
Чтобы получить «красивый» вывод JSON, настройте опции кодирования:
return response()->json($data)
->setOptions(JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);