【问题标题】:Trying to have access to route parameters inside group routing尝试访问组路由中的路由参数
【发布时间】:2021-12-05 16:44:00
【问题描述】:

我试图在我的函数中访问 {module},但它返回了以下错误:

函数 {closure}() 的参数太少,在第 62 行的 /Users/Bernard/PROJECTS/myproject/vendor/laravel/lumen-framework/src/Routing/Router.php 中传递了 1 个,而预期正好是 2 个

这是我的代码:

$app->router->group([
    'namespace' => 'App\Http\Controllers',
], function ($router) {
    $router->group([
        'namespace'  => $version,
        'prefix'     => "api/$version/{contest}/{module}",
        'middleware' => 'App\Http\Middleware\COMMON\DefineContest',
    ], function ($request, $module) use ($router) {
        dd($module);
        require __DIR__ . "/../routes/v1/{module}.routes.php";
    });
});

【问题讨论】:

  • 启用外墙并使用Illuminate\Support\Facades\Route::parameter('parameter_name')
  • :'( 调用未定义的方法 Laravel\Lumen\Routing\Router::parameter() 我确实启用了外观。
  • 哦,抱歉,这在 Laravel 中有效,但没想到它在 Lumen 中不可用。如果你愿意,我可以使用正则表达式和普通 php 给出一个命令式的答案。

标签: php lumen


【解决方案1】:

在 Laravel 中,它就像调用 Illuminate\Support\Facades\Route::parameter(paramname) 一样简单,但由于它显然在 Lumen 中不可用(查看 Lumen 路由器,这个用例没有方法或参数),这是一个必要的答案,确实得到完成的工作:

$version = 1;

$router->group([
    'namespace' => 'App\Http\Controllers',
], function ($router) use ($version) {
    $router->group([
        'namespace' => $version,
        'prefix' => "api/$version/{contest}/{module}",
        'middleware' => 'App\Http\Middleware\COMMON\DefineContest'
    ], function ($router) use ($version) {
        $url = $_SERVER['REQUEST_URI'];
        if (preg_match("/api\/$version\/(?<contest>\w+)\/(?<module>\w+)/", $url, $output)) {
            $module = $output['module'];
            dd($module);
        }
    });
});

我应该指出,这段代码会为每条路线增加一个额外的步骤,我认为这并不重要,因为它并不重,但需要注意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2020-09-25
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多