Laravel 将路由转发到另一个路由文件

Laravel Forwarding Route To Another Route File

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

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

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

所以:

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

/find - 然后在文件夹 Modules/phonefinder/routes.php

中调用 /find 路由

关于如何实现这一点有什么想法吗?

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

创建一个中间件
php artisan make:middleware MiddlewareName

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

在这个中间件中,在 handle 函数中编写您的控件。应该return $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 端点时,它都会先转到中间件。

你要找的是HMVC,可以发送内部路由请求,但是Laravel不支持

如果您想为您的模块化应用程序设置一个访问点,那么您应该这样声明(例如):

Route::any('api/{module}/{action}', 'InputController@moduleAction');

然后在您的 moduleAction($module, $action) 中您可以相应地处理它,初始化所需的模块并使用所有附加数据调用它的操作。按照您需要的方式实施您自己的 Module class 并从那里开始工作。

Laravel 不支持 HMVC,您不能让一个通用路由使用其他内部路由。如果这些路线(/find 在你的情况下)不是内部的并且可以公开访问那么也有一条通用路线没有意义。