Метод withHeaders
Метод withHeaders применяется к объекту ответа
и позволяет добавить несколько HTTP-заголовков одновременно.
В качестве параметра метод принимает массив, где ключами
являются названия заголовков, а значениями - их содержимое.
Метод возвращает тот же объект ответа, что позволяет
использовать цепочки вызовов.
Синтаксис
<?php
response($content)->withHeaders($headers);
?>
Пример
Давайте добавим несколько заголовков к ответу:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/headers', function () {
$headers = [
'X-Header-One' => 'value1',
'X-Header-Two' => 'value2',
'X-Custom-Header' => 'custom-value'
];
return response('Hello World')
->withHeaders($headers);
});
?>
Пример
Давайте добавим заголовки для кеширования и типа содержимого:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function show(Request $request)
{
$headers = [
'Cache-Control' => 'no-cache, no-store, must-revalidate',
'Content-Type' => 'application/json',
'X-Content-Type-Options' => 'nosniff'
];
$data = [
'status' => 'success',
'data' => ['id' => 1, 'title' => 'article']
];
return response()->json($data)
->withHeaders($headers);
}
}
?>
Пример
Давайте добавим заголовки для защиты от кликджекинга:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/secure', function () {
$headers = [
'X-Frame-Options' => 'DENY',
'X-XSS-Protection' => '1; mode=block',
'Referrer-Policy' => 'no-referrer'
];
return view('secure')
->withHeaders($headers);
});
?>
Пример
Давайте используем withHeaders вместе с другими методами ответа:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$headers = [
'X-Total-Count' => '10',
'X-Page' => '1',
'X-Per-Page' => '10'
];
$users = [
['id' => 1, 'name' => 'user1'],
['id' => 2, 'name' => 'user2'],
['id' => 3, 'name' => 'user3']
];
return response()
->json($users)
->withHeaders($headers)
->cookie('last_visited', now()->toDateTimeString());
}
}
?>