Как правильно вызывать Middleware в Laravel
Всем доброго дня!
Столкнулся со следующей проблемой при реализации middleware. Написал middleware для обработки запроса. В итоге он вызывается после конструктора контроллера, потом после него еще раз вызывается конструктор контроллера. Хотя middleware должен вызваться до контроллера
Код ниже
Создал middleware:
class MyMiddleware
{
public function handle(Request $request, Closure $next) {
Log::log("debug", "Вызов middleware");
return $next($request);
}
}
Определил его в App\Http\Kernel.php
protected $middlewareGroups = [
//...
'api' => [
//...
\App\Http\Middleware\MyMiddleware::class,
],
];
Далее в файле routes\api.php определил маршруты
Route::post('test', '\App\Http\Controllers\TestController@test');
Создал котроллер
class TestController extends Controller {
public function __construct()
{
Log::log("debug","Конструктор контроллера вызван");
}
public function test(Request $request) {
//какой-то код который выполняется...
}
}
В результате всего этого, в лог падают сообщения в следующем порядке:
1. Конструктор контроллера вызван
2. Вызов middleware
3. Конструктор контроллера вызван
Где я допустил ошибку? Почему конструктор контроллера на группе маршрутов вызывается дважды до выполнения middleware и после, а если повесить middleware на все маршруты, то он вызов котроллера произойдет один раз после выполнения middleware.
Ответы (1 шт):
- метод
log
фасадаLog
принимает на вход 2 аттрибута - уровень логированя и сообщение. Ваш код не будет писать в лог ничего кроме исключенияToo few arguments to function Illuminate\Log\LogManager::log()
public test(Rquest $request)
- сразу две ошибки. Пропущено словоfunction
иRquest
вместоRequest
Middleware
class MyMiddleware
{
public function handle(Request $request, Closure $next) {
Log::log("info", "Вызов middleware");
return $next($request);
}
}
Контроллер
class TestController extends Controller
{
public function __construct()
{
Log::log("info", "Конструктор контроллера вызван");
}
public function test(Request $request) {
Log::log("info", "Метод контроллера вызван");
}
}
Результат
[2024-07-17 08:23:19] local.INFO: Конструктор контроллера вызван
[2024-07-17 08:23:19] local.INFO: Вызов middleware
[2024-07-17 08:23:19] local.INFO: Метод контроллера вызван