首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel将路由转发到另一个路由文件

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

Stack Overflow用户
提问于 2018-07-19 08:51:32
回答 2查看 988关注 0票数 0

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

我希望这样,如果有人转到/api/*/ InputController (/api/是一个路由组),它就会转到一个。/ api /旁边的第一个变量是api请求信息的模块名。例如: /api/phonefinder/find

在本例中,当有人按下此路由时,它将转到InputController,如果模块'phonefinder‘存在,则将验证,然后将/api/phonefinder之后的任何内容发送到该模块文件夹中的正确路由文件(在本例中是'/find’路由.)

所以:

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

/find -然后调用文件夹中的/find路由模块/phonefinder//find

有什么办法能做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-19 08:59:52

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

代码语言:javascript
运行
复制
php artisan make:middleware MiddlewareName

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

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

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

代码语言:javascript
运行
复制
'middleware_name' => \App\Http\Middleware\MiddlewareName::class,

最后,转到您的web.php文件并设置中间件。例如:

代码语言:javascript
运行
复制
Route::middleware(['middleware_name'])->group(function () {
    Route::prefix('api')->group(function () {
        Route::get('/phonefinder', 'SomeController@someMethod');
    });
});

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

票数 1
EN

Stack Overflow用户

发布于 2018-07-19 09:19:22

您正在寻找的是HMVC,您可以发送内部路由请求,但Laravel不支持它。

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

代码语言:javascript
运行
复制
Route::any('api/{module}/{action}', 'InputController@moduleAction');

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51418266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档