如何将附加参数传递给 Mojolicious 中的 `under` 子程序?

How to pass additional parameters to `under` subroutine in Mojolicious?

我有两条路线:

$auth =  $r->under( \&auth );
$auth->get( "/test",   { level => 'user' }  )->to( "C#A1" );
$auth->get( "/secure", { level => 'admin' } )->to( "C#A2" );

我使用 under 检查访问级别。但是当 auth 子程序被调用时它还没有 { level } 值。 { 级别 } 将仅在行动中可用。

如何更好地将目标路由所需的用户级别传递给 &auth 函数?

我找到答案了。我应该使用 stack 方法:

sub auth {
    ...
    return 1   if $c->match->stack->[-1]{ level } <= $user->level;
}

它包含:

[
  { api => 1, cb => sub { ... } },                     # stash at &auth
  { api => 1, cb => sub { ... }, level => "user" },    # stash at &C#A*
]

另一种方法是让 level 成为一个单独的 sub 来设置级别并将其用于路由。

my $user  = $r->under('/user' )->to('auth#check_user' );
my $admin = $r->under('/admin')->to('auth#check_admin');
$user ->get("/test"  )->to("C#A1");
$admin->get("/secure")->to("C#A2");

此示例将使您的路线为 /user/test/admin/secure。不确定这是否是您要找的。