首页 > 解决方案 > Laravel 将路由转发到另一个路由文件

问题描述

我正在构建企业模块化 Laravel Web 应用程序,但我遇到了一个小问题。

我想拥有它,这样如果有人去 /api/*/ 路由(/api/ 是一个路由组),它将去一个 InputController。/api/ 旁边的第一个变量将是 api 从中请求信息的模块名称。比如说:/api/phonefinder/find

在这种情况下,当有人点击这条路由时,它将转到 InputController,验证模块“phonefinder”是否存在,然后将 /api/phonefinder 之后的任何内容发送到该模块文件夹中正确的路由文件(在这种情况下,“/找到'路线..)

所以:

/api/phonefinder/find - 转到输入控制器并验证是否存在 phonefinder 模块(即使它是另一个模块而不是 phonefinder,也总是转到 InputController)

/find - 然后在 Modules/phonefinder/routes.php 文件夹中调用 /find 路由

关于如何实现这一目标的任何想法?

标签: phplaravellaravel-5webrestful-architecture

解决方案


中间件就是为此目的而设计的。您可以通过键入来创建中间件

php artisan make:middleware MiddlewareName

它将在namespace App\Http\Middleware;路径下创建一个名为“MiddlewareName”的中间件。

在这个中间件中,在handle函数中编写您的控件。它应该返回$next($request);不要更改这部分。

在您的Http\Kernel.php文件中,转到$routeMiddleware变量并添加以下行:

'middleware_name' => \App\Http\Middleware\MiddlewareName::class,

最后,转到您的web.php文件并设置中间件。可以举一个例子:

Route::middleware(['middleware_name'])->group(function () {
    Route::prefix('api')->group(function () {
        Route::get('/phonefinder', 'SomeController@someMethod');
    });
});

每当您调用api/phonefinder端点时,它将首先进入中间件。


推荐阅读