php - Laravel 将路由转发到另一个路由文件
问题描述
我正在构建企业模块化 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 路由
关于如何实现这一目标的任何想法?
解决方案
中间件就是为此目的而设计的。您可以通过键入来创建中间件
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
端点时,它将首先进入中间件。
推荐阅读
- reactjs - 使用 Azure App Service 扩展部署 React App 时出现“错误:编写 ECONNABORTED”
- lua - Lua表差异键功能
- java - 如何从 Firebase 中同时检索字符串和列表
- c# - 如何在 Asp.Net Core MVC 中进行自定义模型绑定
- javascript - 如何在按钮单击时验证输入不保存 0 或小于 0?
- java - 当可滚动的recyclerView i仅占手机屏幕的一半时,如何在活动中滚动整个屏幕
- isabelle - 在区域设置(组)内使用规则 Isabelle
- python - 如何从一个 Django 模型中获取数据以在模板循环中查询另一个模型?
- javascript - addEventListener 被忽略
- visual-studio-code - VSCode remote-ssh 扩展:服务器端端口