我正在构建企业模块化的Laravel应用程序,但我遇到了一个小问题。
我希望这样,如果有人转到/api/*/ InputController (/api/是一个路由组),它就会转到一个。/ api /旁边的第一个变量是api请求信息的模块名。例如: /api/phonefinder/find
在本例中,当有人按下此路由时,它将转到InputController,如果模块'phonefinder‘存在,则将验证,然后将/api/phonefinder之后的任何内容发送到该模块文件夹中的正确路由文件(在本例中是'/find’路由.)
所以:
/api/ phonefinder /find -转到输入控制器并验证phonefinder模块是否存在(始终转到InputController,即使它的另一个模块而不是phonefinder)
/find -然后调用文件夹中的/find路由模块/phonefinder//find
有什么办法能做到这一点吗?
发布于 2018-07-19 08:59:52
中间件就是为此目的而设计的。您可以通过键入
php artisan make:middleware MiddlewareName它将在MiddlewareName路径下创建一个名为“namespace App\Http\Middleware;”的中间件。
在这个中间件中,在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端点时,它将首先转到中间件。
发布于 2018-07-19 09:19:22
您正在寻找的是HMVC,您可以发送内部路由请求,但Laravel不支持它。
如果您想为您的模块化应用程序拥有一个访问点,那么您应该这样声明它(例如):
Route::any('api/{module}/{action}', 'InputController@moduleAction');然后,在您的moduleAction($module, $action)中,您可以相应地处理它,初始化所需的模块,并使用所有附加的数据调用它的操作。按照您需要的方式实现您自己的Module类,并从那里开始工作。
Laravel不支持HMVC,您不能有一条通用路由使用其他内部路由。如果这些路由(在您的例子中是/find)不是内部的,并且可以公开访问,那么也有一个通用路由是没有意义的。
https://stackoverflow.com/questions/51418266
复制相似问题