Действия контроллеров могут возвращать несколько различных результатов. К примеру, часто для этого используется функция представления
view или же простой возврат текста:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MouseController extends Controller{
public function showView(){
return view('mouse.show');
}
public function showText(){
return 'Тише, мыши, кот на крыше!';
}
}
?>
Но существует и ещё один вариант. Иногда бывает полезным возвращать объект класса
Response. Этот объект позволяет установить HTTP код ответа и заголовок. Первым параметром ему передаётся текст ответа, а вторым - код статуса страницы.
<?php
new Response('Привет', 200)); // страница загружена
new Response('Страница не найдена', 404)); // нет такого документа
new Response('Ошибка сервера', 500)); // сервер выдал ошибку
?>
Если нужно добавить ещё один заголовок, то можно использовать метод
header. Метод можно применять несколько раз, чтобы задать все необходимые данные заголовков.:
<?php
new Response('Привет', 200))->header('Content-Type', 'text/plain');
new Response('Привет', 200))->header('Content-Type', 'text/plain')
->header('X-Header-Food', 'Cheese')
->header('X-Header-Animal', 'Mouse');
?>
Если нужно передать много заголовков, то можно использовать метод
withHeaders, которому передаётся массив из заголовков и значений:
<?php
new Response('Привет', 200))->withHeaders([
'Content-Type' => 'text/plain',
'X-Header-Food' => 'Cheese',
'X-Header-Animal' => 'Mouse',
]);
?>
На практике возврат этого объекта класса
Response можно делать непосредственно в строке return или с помощью вспомогательной функции
response:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MouseController extends Controller{
public function show1(){
return (new Response('Привет', 200))->header('Content-Type', 'text/plain');
}
public function show2(){
return response('Привет', 200)->header('Content-Type', 'text/plain');
}
}
?>
Если нужно одновременно использовать методы класса
Response и возвращать шаблон, то можно использовать метод
view:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MouseController extends Controller{
public function show(){
return response()->view('mouse.show')
->header('Content-Type', 'text/plain');
}
}
?>