我正在构建企业模块化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路由
关于如何实现这一目标的任何想法?
答案 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
)不是内部的并且可以公开访问,那么也只有一条通用路由是没有意义的。