Метод handle()
в middleware в Laravel должен возвращать либо объект Response
, либо результат выполнения следующего middleware в цепочке. Если текущий middleware не возвращает объект Response
, то он должен вызвать метод next($request)
для передачи управления следующему middleware в цепочке. Если все middleware в цепочке были выполнены, то Laravel вернет объект Response
, который будет отправлен клиенту.
Как добавить middleware в Laravel?
namespace App\Http\Middleware;
use Closure;
class MyMiddleware
{
public function handle($request, Closure $next)
{
// Код middleware
return $next($request);
}
}
В файле app/Http/Kernel.php можно зарегистрировать middleware и добавить его в нужную группу:
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $middlewareGroups = [
'web' => [
// Другие middleware
\App\Http\Middleware\MyMiddleware::class,
],
];
}
Как добавить middleware к маршруту в Laravel?
use App\Http\Controllers\MyController;
Route::get('/my-route', [MyController::class, 'myMethod'])
->middleware(\App\Http\Middleware\MyMiddleware::class);
В этом примере middleware MyMiddleware будет применяться только к маршруту /my-route и его дочерним маршрутам.
Как передать параметры в middleware в Laravel?
use App\Http\Controllers\MyController;
Route::get('/my-route/{id}', [MyController::class, 'myMethod'])->middleware(\App\Http\Middleware\MyMiddleware::class . ':param1,param2');
В этом примере параметры param1 и param2 будут переданы в конструктор middleware MyMiddleware. В middleware параметры можно получить в конструкторе или в методе handle. Например:
namespace App\Http\Middleware;
use Closure;
class MyMiddleware
{
private $param1;
private $param2;
public function __construct($param1, $param2)
{
$this->param1 = $param1;
$this->param2 = $param2;
}
public function handle($request, Closure $next)
{
// Использование параметров
return $next($request);
}
}
Я даю согласие на сбор и обработку моих персональных данных. Политика конфиденциальности