如何将附加参数传递给 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
。不确定这是否是您要找的。
我有两条路线:
$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
。不确定这是否是您要找的。