Промежуточное ПО Laravel

Я создал промежуточное программное обеспечение Laravel с помощью этого кода:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Containers\Modals\Models\Modal;

class ModalsMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next, string $modalNames): Response
    {
        $modals = explode(',', $modalNames);
        foreach ($modals as $modalName) {
            $modal = Modal::where('slug', $modalName)->first();
            if (!$modal->enabled) {
                abort(404);
            }
        }
        return $next($request);
    }
}

Затем я обновил Kernel.php:

**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $routeMiddleware = [
       ...,
       'modals' => \App\Http\Middleware\ModalsMiddleware::class,
    ];

И для моей группы маршрутов я добавил следующее:

Route::group([
    'prefix' => 'api/v1/routeName',
    'middleware' => ['auth:api', 'modals:AModalName']
], function() {...});

Тогда я побежал: php artisan optimize && php artisan config:cache && php artisan cache:clear && php artisan config:clear && composer dump-autoload И остановил обслуживание, а затем перезапустил приложение.

Однако у меня была эта ошибка:

"message": "Target class [modals] does not exist.",
    "exception": "Illuminate\\Contracts\\Container\\BindingResolutionException",

Как я могу это исправить?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Laravel 11 вам необходимо зарегистрировать свое промежуточное программное обеспечение в файле bootstrap/app.php.

->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'modals' => \App\Http\Middleware\ModalsMiddleware::class,
        ]);
    })

Для получения более подробной информации посетите официальную документацию.

Вот как выглядит полный код.

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__ . '/../routes/web.php',
        commands: __DIR__ . '/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'modals' => \App\Http\Middleware\ModalsMiddleware::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

Другие вопросы по теме

Промежуточное ПО .NET 8 неожиданно меняет код состояния на 204 после _next(context)
Пользовательское промежуточное программное обеспечение Rails не распознается в GH CI
Ошибка промежуточного программного обеспечения Laravel: аргумент № 1 ($content) должен иметь тип ?string, задан Illuminate\Routing\Redirector
Есть ли способ передать мою константу middleware.ts, которая проверяет, вошел ли пользователь в другой API, логику домена или page.tsx? (также открыт для новых предложений)
Как написать промежуточное программное обеспечение или перехватчик SvelteKit для выборки как на сервере, так и на клиенте?
Регистрация промежуточного программного обеспечения Laravel, не делая его глобальным
Установите файл cookie запроса в промежуточном программном обеспечении NextJS v14
Как перенаправить исключение, перехваченное промежуточным программным обеспечением, обратно в метод действия контроллера в C# ASP.NET Core?
Получение страницы 404 при использовании NextResponse.next() в промежуточном программном обеспечении Next.js 14
Как исправить ошибку признака службы при использовании from_fn_with_state для промежуточного программного обеспечения?