Как запустить миддлвар один раз?

В Laravel миддлвары используются для обработки запросов перед тем, как они достигнут конечного обработчика (контроллера) и перед тем, как они возвращаются обратно клиенту. Миддлвары могут быть использованы для авторизации пользователей, обработки входных данных, проверки прав доступа и т. д.

Обычно миддлвары в Laravel выполняются для каждого запроса, но иногда бывает необходимо запустить миддлвар только один раз, например, для выполнения конкретной операции перед всеми запросами или для проверки состояния приложения.

Для запуска миддлвара один раз в Laravel можно воспользоваться глобальным миддлваром. Глобальные миддлвары выполняются для каждого запроса в вашем приложении, но чтобы выполнить какую-то операцию только один раз, вы можете добавить проверку внутри глобального миддлвара.

Для этого откройте файл app/Http/Kernel.php в вашем Laravel-приложении и найдите свойство $middleware. Здесь определяются все глобальные миддлвары вашего приложения. Добавьте свой глобальный миддлвар и в методе handle() миддлвара добавьте проверку, чтобы ваш код выполнился только один раз.

Пример:

<?php

namespace AppHttpMiddleware;

use Closure;

class MyGlobalMiddleware
{
    /**
     * Обработать входящий запрос.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Проверяем, был ли миддлвар уже выполнен, используя переменную состояния в сессии
        if (!session()->has('middleware_executed')) {
            // Ваш код для выполнения только один раз
            // ...

            // Устанавливаем флаг в сессии, чтобы миддлвар не выполнился снова
            session()->put('middleware_executed', true);
        }

        return $next($request);
    }
}

После того, как добавили свой глобальный миддлвар в файл Kernel.php, убедитесь, что добавили его в список глобальных миддлваров:

protected $middleware = [
    // ...
    AppHttpMiddlewareMyGlobalMiddleware::class,
];

Теперь ваш глобальный миддлвар будет выполняться для каждого запроса в вашем приложении, но код внутри него будет выполняться только один раз, благодаря проверке и установке флага в сессии.