在注册路由之前,Laravel中间件



我正在开发一个Laravel应用程序。现在,我正在尝试创建一个在注册任何路由之前检查的中间件。从逻辑上讲,这就是我要做的。我有一个保存在数据库中的路由列表。成像,有一个称为重定向的模型。在中间件中,我想检查,如果请求的路径落入数据库中的重定向之一,我将重定向到其他路径。现在,我创建了一个名为 RedirectMiddleware 的中间件。然后我像这样在内核类中注册了它,

protected $middlewareGroups = [
        'web' => [
            RedirectMiddleware::class,
        ],
        'api' => [
            //other stuff
        ],
    ];

问题是,当我访问不存在的路由时,它会在没有先通过中间件的情况下呈现 404 错误页面。如何创建/注册在注册任何路由之前调用的中间件?或者有什么更好的方法来实现我想要实现的目标,而不是使用中间件?

在Laravel中,HTTP内核处理中间件注册。但是要注册它,您必须输入配置。在注册中,从应用程序\Http\内核.php中获取所需的配置。在那里,我们需要注意我们的命名空间。Laravel只读取App\Http命名空间中的内容。当你调用你的中间件时,你试图在相对论中引用它,就好像它在当前命名空间中一样。

protected $middlewareGroups = [
        'web' => [
            RedirectMiddleware::class,
        ],
        'api' => [
            //other stuff
        ],
    ];

您需要做的是直接引用它。为此,您需要转义命名空间并提供路径。这样。。。

protected $middlewareGroups = [
        'web' => [
             // Your other middlewares
             AppHttpMiddlewareRedirectMiddleware::class,
        ],
        'api' => [
            //other stuff
        ],
    ];

这应该可以解决您的问题。如果没有,请告诉我并发布您的中间件,以便我们了解您到底在做什么。

-- 当前 Laravel 文档 07/19/2019 :: https://laravel.com/docs/5.8/middleware#registering-middleware

最新更新