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

时间:2018-07-19 08:51:33

标签: php laravel laravel-5 web restful-architecture

我正在构建企业模块化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路由

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

2 个答案:

答案 0 :(得分:1)

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

来创建中间件
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端点,它都会首先进入中间件。

答案 1 :(得分:0)

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

如果要为模块化应用程序提供一个访问点,则应这样声明它(例如):

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

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

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