【问题标题】:Laravel Forwarding Route To Another Route FileLaravel 将路由转发到另一个路由文件
【发布时间】:2018-07-19 08:51:32
【问题描述】:

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

我想拥有它,这样如果有人去 /api/*/ 路由(/api/ 是一个路由组),它将去一个 InputController。 /api/ 旁边的第一个变量将是 api 从中请求信息的模块名称。比如说:/api/phonefinder/find

在这种情况下,当有人点击这条路由时,它将转到 InputController,验证模块“phonefinder”是否存在,然后将 /api/phonefinder 之后的任何内容发送到该模块文件夹中正确的路由文件(在这种情况下'/find' 路线..)

所以:

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

/find - 然后在 Modules/phonefinder/routes.php 文件夹中调用 /find 路由

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

【问题讨论】:

  • 所以你基本上想要重写 api 路由。我想你可以用 .htaccess 文件来做到这一点。看看here。或与 mod_rewrite 相关的任何其他文章。
  • 有什么理由不直接链接到模块?
  • @kerbholz 我想要一个脚本来验证模块是否可用,并且允许用户在实际调用它之前先使用它,我想中间件可以按照下面的建议工作

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


【解决方案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端点时,它都会先到中间件。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多