Метод options
Метод options применяется к экземпляру класса Route
и регистрирует маршрут для обработки HTTP запросов с методом
OPTIONS. Он принимает два параметра: путь и обработчик.
В качестве обработчика может выступать замыкание или массив
из контроллера и его метода. Этот метод позволяет добавлять
поддержку CORS или возвращать информацию о доступных методах
для конкретного URL.
Синтаксис
<?php
Route::options($uri, $callback);
?>
Пример
Давайте создадим маршрут для OPTIONS запросов с помощью замыкания:
<?php
use Illuminate\Support\Facades\Route;
Route::options('/api/posts', function () {
return response()->json([
'methods' => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
]);
});
?>
Результат выполнения OPTIONS запроса к /api/posts:
{
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"]
}
Пример
Давайте зарегистрируем OPTIONS маршрут с использованием контроллера:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\OptionsController;
Route::options('/api/users', [OptionsController::class, 'getOptions']);
?>
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class OptionsController extends Controller
{
public function getOptions(Request $request)
{
$allowedMethods = ['GET', 'POST', 'PATCH', 'DELETE'];
return response()->json([
'allowed_methods' => $allowedMethods,
'path' => $request->path()
]);
}
}
?>
Результат выполнения OPTIONS запроса к /api/users:
{
"allowed_methods": ["GET", "POST", "PATCH", "DELETE"],
"path": "api/users"
}
Пример
Давайте создадим маршрут для OPTIONS запросов с параметром в URI:
<?php
use Illuminate\Support\Facades\Route;
Route::options('/api/posts/{id}', function ($id) {
return response()->json([
'available_methods' => ['GET', 'PUT', 'DELETE'],
'post_id' => $id
]);
});
?>
Результат выполнения OPTIONS запроса к /api/posts/5:
{
"available_methods": ["GET", "PUT", "DELETE"],
"post_id": "5"
}
Пример
Давайте используем метод options для настройки CORS заголовков:
<?php
use Illuminate\Support\Facades\Route;
Route::options('/api/secure-data', function () {
return response('')
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE')
->header('Access-Control-Allow-Headers', 'Content-Type, Authorization')
->header('Access-Control-Max-Age', '86400');
});
?>
Результат выполнения OPTIONS запроса к /api/secure-data:
<html>
<head>
<title>Empty Response</title>
</head>
<body>
Заголовки ответа: Access-Control-Allow-Origin: *,
Access-Control-Allow-Methods: GET, POST, PUT, DELETE,
Access-Control-Allow-Headers: Content-Type, Authorization,
Access-Control-Max-Age: 86400
</body>
</html>