вопросы пишите мне в телеграмм +375298176892
можно скачать офлайн версию сайта: code.mu old.code.mu

Отклики Response в Laravel

Как вы уже знаете, обычно действия контроллеров возвращают результат работы функции view, то есть представление:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return view('test.show'); // вернем представление } } ?>

Можно также просто вернуть текст:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return 'текст'; // вернем текст } } ?>

Существует и третий вариант - можно вернуть объект класса Response. Данный объект позволяет устанавливать код HTTP ответа, а также HTTP заголовки этого ответа.

Конструктор класса Response первым параметром принимает текст ответа, а вторым - код HTTP статуса (200, 404 и тп):

<?php new Response('текст', 'статус')); ?>

Для добавления заголовков используется метод header:

<?php new Response('текст', 'статус'))->header('заголовок', 'значение'); ?>

Попробуем на практике. Пусть наше действие show вернет объект с откликом:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Response; // подключаем класс Response class TestController extends Controller { public function show() { return (new Response('Hello World', 200))->header('Content-Type', 'text/plain'); } } ?>

Для удобства можно использовать вспомогательную глобальную функцию response:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return response('Hello World', 200)->header('Content-Type', 'text/plain'); } } ?>

Можно использовать несколько методов header в виде цепочки для добавления нескольких заголовков в отклик:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return response('Hello World', 200) ->header('Content-Type', 'text/plain') ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value'); } } ?>

Можно также отправлять несколько заголовков в виде массива, используя метод withHeaders:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show() { return response('Hello World', 200)->withHeaders([ 'Content-Type' => 'text/plain', 'X-Header-One' => 'Header Value', 'X-Header-Two' => 'Header Value', ]); } } ?>

Верните результатом какого-нибудь действия объект Response с каким-нибудь заголовком.

Отправка шаблона в отклик

Если вам нужен доступ к методам класса Response, но вы хотите возвращать шаблон в качестве содержимого отклика, то вы можете использовать метод view:

<?php return response()->view('test.show')->header('Content-Type', 'text/plain'); ?>