Метод withoutMiddleware
Метод withoutMiddleware применяется к экземпляру маршрута и позволяет исключить один или несколько промежуточных слоёв (middleware) из цепочки обработки запроса. Это полезно, когда для определённого маршрута нужно отключить глобальные или групповые посредники, например, проверку CSRF-токена или аутентификацию. Первым параметром передаётся имя класса посредника или массив имён.
Синтаксис
<?php
Route::get($uri, $action)->withoutMiddleware($middleware);
?>
Пример
Исключим проверку CSRF-токена для маршрута с формой обратной связи:
<?php
use AppHttpControllersFeedbackController;
Route::post('/feedback', [FeedbackController::class, 'store'])
->withoutMiddleware(\AppHttpMiddlewareVerifyCsrfToken::class);
?>
Пример
Исключим несколько посредников одновременно для группы маршрутов административной панели:
<?php
use AppHttpControllersAdminController;
Route::prefix('admin')->group(function () {
Route::get('/dashboard', [AdminController::class, 'dashboard'])
->withoutMiddleware([
\AppHttpMiddlewareAuthenticate::class,
\AppHttpMiddlewareEncryptCookies::class
]);
Route::get('/users', [AdminController::class, 'users'])
->withoutMiddleware([
\AppHttpMiddlewareAuthenticate::class,
\AppHttpMiddlewareEncryptCookies::class
]);
});
?>
Пример
Используем метод withoutMiddleware внутри определения маршрутов с промежуточными слоями. Исключим посредник для API-маршрута:
<?php
use AppHttpControllersApiUserController;
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', [ApiUserController::class, 'show']);
Route::post('/user', [ApiUserController::class, 'store'])
->withoutMiddleware('auth:sanctum');
});
?>
В этом примере для POST-запроса к / user посредник auth:sanctum будет исключён, тогда как GET-запрос останется защищённым.
Пример
Исключим посредник для маршрута с использованием контроллера и указанием метода:
<?php
use AppHttpControllersPaymentController;
Route::controller(PaymentController::class)->group(function () {
Route::get('/payment/status', 'status')
->withoutMiddleware(\AppHttpMiddlewareCheckPayment::class);
Route::post('/payment/process', 'process')
->withoutMiddleware(\AppHttpMiddlewareCheckPayment::class);
});
?>
Смотрите также
-
метод
middleware,
который назначает посредники для маршрута -
метод
group,
который группирует маршруты и применяет общие настройки -
метод
prefix,
который добавляет префикс к URI маршрутов -
метод
where,
который добавляет ограничения для параметров маршрута