Как вы уже знаете, обычно действия контроллеров возвращают результат работы функции 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');
?>