HTTP-ответы

Каждый маршрут и контроллер в Imhotep должен возвращать HTTP-ответ. Фреймворк предлагает несколько способов формирования ответов — от простейших до максимально гибких.

Простые ответы

Верните строку - Imhotep автоматически преобразует её в полноценный HTTP-ответ:

Route::get('/', function () {
    return 'Hello World';
});
PHP

Нужен JSON? Верните массив или любой объект, реализующий JsonSerializable, ArrayObject, Arrayable или Jsonable:

Route::get('/api/data', function () {
    return ['one', 'two', 'three'];
});
PHP

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']
    );
});
PHP

Доступен и более выразительный цепочечный интерфейс:

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',
        ]);
});
PHP

Заголовки можно проверять, получать и удалять:

if ($response->hasHeader('X-Custom')) {
    $value = $response->header('X-Custom');
    $response->removeHeader('X-Custom');
}
PHP

JSON ответы

Для возврата JSON в Imhotep предусмотрен Imhotep\Http\JsonResponse. Удобнее всего использовать хелпер response()->json():

return response()->json([
    'user' => $user,
    'token' => $token
]);
PHP

Статус и заголовки передаются вторым и третьим аргументами:

return response()->json($data, 201, ['X-Request-ID' => $id]);
PHP

Для JSONP-ответов используйте метод jsonp():

return response()->jsonp('callback', $data);
PHP

Imhotep автоматически проверит имя callback-функции на недопустимые символы и зарезервированные слова JavaScript.

Чтобы получить «красивый» вывод JSON, настройте опции кодирования:

return response()->json($data)
    ->setOptions(JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
PHP